【问题标题】:Why global variables are not known at compile-time?为什么全局变量在编译时不知道?
【发布时间】:2022-01-11 15:39:25
【问题描述】:

在 C++ 中,我知道如果我在函数中声明了一个变量,则该变量实际上被视为auto 局部变量(一旦函数执行return 就被销毁)。因此,有理由认为,局部变量不能像 constexpr 变量的初始化程序那样出现在常量表达式中,因为它在运行时就知道,它需要在其中声明要执行的函数,而这只发生在运行时.

int x { 10 };
constexpr int y { x }; //error: x should be const

int main()
{
    //..
}

我的问题是,如果这个变量是全局变量会发生什么?所以不需要执行运行时函数来知道x的值,因为它不属于任何函数?我的问题,换句话说,编译器什么时候知道这个变量的值x

我已经知道,如果变量 x 是 const,那么 x 将是一个常量表达式,但这是为什么呢?

【问题讨论】:

    标签: c++ global-variables constexpr constant-expression


    【解决方案1】:

    在您的特定示例中,编译器可能知道。它只是不必。

    但如果你有

    int x { 10 };
    someclass trix{};
    constexpr int y { x }; //error: x should be const
    

    现在trix 的构造函数只是可以修改x,编译器不会知道。特别是如果 trix.cpp 在主文件之后编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多