【发布时间】:2016-01-21 09:35:40
【问题描述】:
我尝试执行两种不同的场景:
场景 1:
const auto arraySize = 10; // fine, arraySize is constant
std::array<int, arraySize> data;
在这里,arraySize 被视为编译时间常数,因此它在 std::array 中是允许的。
场景 2:
int sz=10;
const auto arraySize = sz; // fine .
std::array<int, arraySize> data; //error , arraySize is not compile time constant .
在场景 2 中,尽管 arrySize 是 sz 的常量副本,但 arraySize 不被视为编译时常量。
为什么要区别对待这两种情况?
【问题讨论】:
-
arraySize是非常量的常量副本...? -
因为
const并不意味着“编译时间常数”。在某些情况下,它可以是编译时的,但不能保证,因此您不能在需要编译时常量的上下文中使用它们。请改用constexpr!
标签: c++ c++11 constants stdarray