【发布时间】:2016-11-27 12:42:17
【问题描述】:
这是代码:
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 的?
或者是否还有其他关于导致此错误的引用的微妙之处?
【问题讨论】:
-
cosnt int* p1 = x;甚至不应该编译。你用的是哪个编译器? -
您第一次使用
p1也是不合法的。你的两个指针初始化都是错误的。 -
VS 2015,打开 /W4、/sdl 和 /WX。如果 x 是非 const 则不编译,但使用 const 编译。
-
再次阅读错误信息。尤其是它告诉你的类型。类型一样吗?
-
@Rakete1111:看起来像 Visual C++。但接下来的问题是:1)哪个版本? 2)哪些编译器标志?您可以通过指定错误的标志来削弱每个 C++ 编译器,而默认标志通常总是错误的。
标签: c++ pointers reference constants