我们可以使用C++中限定为常量且值为0的变量来初始化指针吗?

根据 C++ Primer 一书,我们可以将限定为 const 且值为 0 的变量分配给指针。这是书中的相关内容。

可以分配文字 0 或在编译时已知其值为 0 的常量:

然后提供以下代码片段。

int ival;
int zero = 0;
const int c_ival = 0;
int *pi = ival;        // error
pi = zero;             // error
pi = c_ival            // ok: c_ival is a const with compile-time value of 0

但是,当我运行类似的代码时,会引发错误。

int main()
{
    const int c_ival = 0;
    int *pi = c_ival;            
}

错误:从“int”到“int*”的无效转换 [-fpermissive]

我究竟做错了什么?

回答

根据您的 C++ Primer 版本(以及它所针对的间接标准修订版),这可能只是过时信息的一种情况。

你看,C++03 和 C++11 之间的定义发生了变化。过去,它说:

[转化率]

1 空指针常量是整数类型的整数常量表达式 (5.19) 右值,其计算结果为零。

但是一个未完成的缺陷报告 ( CWG 903 ) 被追溯应用到 C++11 并将措辞更改为

[转化率]

1 空指针常量是具有零值的整数文字 (5.13.2 [lex.icon]) 或类型为 std::nullptr_t 的纯右值。

因此,由于 C++11c_ival不再符合条件。它不是文字0,尽管它仍然是一个值为 0 的常量表达式。


以上是我们可以使用C++中限定为常量且值为0的变量来初始化指针吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>