以下程序编译:
template <const int * P>
class Test{};
extern const int var = 42; //extern needed to force external linkage
int main()
{
Test<&var> test;
}
然而,这个没有,这对我来说是一个惊喜:
template <const int * P>
class Test{};
extern const int var = 42; //extern needed to force external linkage
extern const int * const ptr = &var; //extern needed to force external linkage
int main()
{
Test<ptr> test; //FAIL! Expected constant expression.
}
替代示例:
int main()
{
const int size = 42;
int ok[*&size]; //OK
const int * const pSize = &size;
int fail[*pSize]; //FAIL
}
我得出的结论是,指针不能是常量表达式,无论它是否为 const 并用常量表达式初始化。
问题:
- 我的结论是真的吗?
- 如果是这样,为什么指针不能是常量表达式?如果没有,为什么上面的程序不能编译?
- C++0x(C++11,如果你愿意的话)会改变什么吗?
感谢您的任何见解!