gpt4 book ai didi

c++ - const 内置类型是否在 C++ 中内联?

转载 作者:太空狗 更新时间:2023-10-29 21:18:50 30 4
gpt4 key购买 nike

我查看了 C++14 引用资料,但看不到标准在哪里说 const 内置类型由编译器内联而不是分配。即声明是

const int i = 5;
std::cout<<i;

所有使用 i 的地方都用 5 代替,并且不会分配内存空间。有人可以指出标准部分吗?

最佳答案

听起来像是 odr useas-if rule 这两个概念的结合。

Odr-use,将在 3.2 部分中介绍 一个定义规则 但我们也可以在 4.1 中找到一些相关部分左值到右值的转换,它说:

When an lvalue-to-rvalue conversion is applied to an expression e, and either

  • e is not potentially evaluated, or
  • the evaluation of e results in the evaluation of a member ex of the set of potential results of e, and ex names a variable x that is not odr-used by ex (3.2),

the value contained in the referenced object is not accessed.

并且有以下涉及的示例,它似乎显示了在其生命周期之外使用的引用局部变量捕获但实际上并非如此,因为它没有被 odr 使用,因此实际上不需要分配对象并且因此可以优化掉。

[ Example:

struct S { int n; };
auto f() {
S x { 1 };
constexpr S y { 2 };
return [&](bool b) { return (b ? y : x).n; };
}
auto g = f();
int m = g(false); // undefined behavior due to access of x.n outside its lifetime
int n = g(true); // OK, does not access y.n

—end example ]

这归结为 as-if rule这表示编译器只能模拟程序的可观察行为,基本上它控制了允许的优化。即使优化可能是允许的,编译器也不必执行优化。如果一个对象产生一个常量表达式并且地址不是必需的,则根据as-if 规则 不需要为其分配内存,因为不分配内存的效果是观察不到的。

关于c++ - const 内置类型是否在 C++ 中内联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29112789/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com