[英]Why global variables are not known at compile-time?
在 C++ 中,我知道如果我在 function 中聲明了一個變量,則該變量實際上被視為auto
局部變量(一旦 ZC1C425268E68385D1AB5074C17A94F14 確實return
就被銷毀)。 因此,有理由認為,局部變量不能像constexpr
變量的初始化程序那樣出現在常量表達式中,因為它在運行時就知道,它需要在其中聲明要執行的 function 並且僅在運行時發生。
int x { 10 };
constexpr int y { x }; //error: x should be const
int main()
{
//..
}
我的問題是,如果這個變量是全局的會發生什么? 所以不需要執行運行時函數來知道x
的值,因為它不屬於任何函數? 我的問題,換句話說,編譯器什么時候知道這個變量x
的值
我已經知道,如果變量x
是 const,那么x
將是一個常量表達式,但這是為什么呢?
在您的特定示例中,編譯器可能知道。 它只是不必。
但是如果你有
int x { 10 };
someclass trix{};
constexpr int y { x }; //error: x should be const
現在trix
的構造函數可以修改x
,編譯器不知道。 特別是如果 trix.cpp 在主文件之后編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.