我試圖執行兩種不同的情況:爲什麼常變量不被視爲編譯時間常數有時
方案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中,ARRAYSIZE不被視爲編譯時儘管事實上,arrySize是SZ的恆定不變的副本。
爲什麼這兩種方案進行了區別對待?
'arraySize'是一個* not *常量的常量副本...? – DevSolar
因爲'const'並不意味着「編譯時間常數」。在某些情況下,它可以是編譯時,但不能保證,因此你不能在需要編譯時常量的上下文中使用它們。改用'constexpr'! –