gpt4 book ai didi

c++ - 指向对 const null 值的引用的指针

转载 作者:行者123 更新时间:2023-11-30 03:36:09 25 4
gpt4 key购买 nike

这是代码:

const int   x = 0;
const int& r = x;

const int* p1 = x; // Works (p1 = 0)
const int* p2 = r; // error C2440: 'initializing': cannot convert from 'const int' to 'const int *'

为什么p1设置为x的值,而p2却没有?

是不是p2只看r就不能保证x是const?
或者是否有其他关于导致此错误的引用的微妙之处?

最佳答案

第三行应该会引发错误。它在 VS2015 中没有,因为编译器或标准中存在错误,具体取决于应用的标准。其他编译器会发出有关此行的错误消息。

在 C++11 之前,任何求值为 0 的整数常量表达式都被视为空指针常量,因此第一行等同于 const int* p1 = NULL;,它不会使 p1 指向 x

自 C++14 起,情况不再如此。粗略地说,只有文字零和 nullptr 是有效的空指针常量。

在两者之间,即在 C++11 中,标准实际上允许将计算结果为零的常量表达式视为空指针常量。这被视为标准中的缺陷。它在 C++14 中得到修复。一些编译器(gcc、clang)选择立即修复缺陷,甚至在 C++11 模式下也会报告错误。 VS2015 没有。

第四行在任何版本的 C++ 中都无效,因为 r 的类型是引用,而不是整数。

关于c++ - 指向对 const null 值的引用的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40829072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com