簡體   English   中英

為什么全局變量在編譯時不知道?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM