在这段代码中,为什么c++编译器在编译时不直接返回1 test(),而是从内存中读取值?
struct Test {
const int x = 1;
// Do not allow initializing x with a different value
Test() {}
};
int test(const Test& t) {
return t.x;
}
Run Code Online (Sandbox Code Playgroud)
编译器输出:
test(Test const&): # @test(Test const&)
mov eax, dword ptr [rdi]
ret
Run Code Online (Sandbox Code Playgroud)
我本来期望:
test(): # @test(Test const&)
mov eax, 1
ret
Run Code Online (Sandbox Code Playgroud)
是否有任何符合标准的方法来修改 的值Test::x以包含与 不同的值1?或者是否允许编译器进行这种优化,但 gcc 和 clang 都没有实现它?
编辑:当然,您立即发现我将其作为最小示例的错误,即允许结构的聚合初始化。我使用空的默认构造函数更新了代码,以防止出现这种情况。(godbolt 上的旧代码)