提问人:Nikita 提问时间:10/3/2023 更新时间:10/3/2023 访问量:88
C++ 中的值赋值:运行时或编译时
Values assignment in C++: runtime or compile time
答:
0赞
463035818_is_not_an_ai
10/3/2023
#1
这里要考虑的重要事项是假设规则。有关详细信息,我建议您参阅“假设”规则到底是什么?。简而言之,它说编译器生成的程序必须具有相同的可观察行为,就好像它从字面上遵循您在代码中编写的内容一样。除此之外,编译器可以进行任何它认为适用的优化。
int x = 1;
没有可观察到的行为。如果从未使用过,则编译器可以自由地不发出与此行相对应的代码,这些代码将在运行时执行。如果编译器可以看到它从未使用过,它也不能在编译时初始化某些变量。您需要考虑上下文才能理解编译器优化,因为编译器在应用优化时会考虑上下文。x
x
1
但是,这里不是一个恒定的表达式。即使编译器在编译时使用 进行初始化,也无法在需要常量表达式(数组大小、模板参数等)的情况下使用。int x = 1;
x
x
1
x
评论
int x = 1;
x
constexpr
int x = 1;