小编Tob*_*ias的帖子

为什么 C++ 编译器不使用编译时已知的值来替换对 const 类成员的访问?

在这段代码中,为什么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 上的旧代码

c++ constants compiler-optimization constexpr

5
推荐指数
2
解决办法
306
查看次数

标签 统计

c++ ×1

compiler-optimization ×1

constants ×1

constexpr ×1