gpt4 book ai didi

c++ - 这句话在 C++11 标准的第 §3.2/2 段中是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:26 24 4
gpt4 key购买 nike

该句子是段落 §3.2/2 的一部分:

A variable whose name appears as a potentially-evaluated expression is odr-used unless it is an object that satisfies the requirements for appearing in a constant expression (5.19) and the lvalue-to-rvalue conversion (4.1) is immediately applied.

上面加粗的句子到底是什么意思?

编辑:

这个问题的答案被认为是重复的,没有说任何可以回答我的问题的内容。

最佳答案

意思是当你把常量当作常量来使用的时候,就好像你真的在使用一个常量一样。

struct S {
static const int i = 0;
};
int main() {
return S::i;
}

尽管 S::i 有一个初始化程序,但它没有定义,但是您问题中的文本为这样的用途做了一个特殊的异常(exception),其中 S::i 只能访问它的值。在这种情况下,不需要定义。

另一方面,其他用途确实需要定义:

struct S {
static const int i = 0;
};
int f(const int &i) {
return i;
}
int main() {
return f(S::i);
}

这个程序是无效的,被一些实现接受,但被其他实现拒绝。对 f 的调用需要 S::i 的实际定义存在,尽管如果 f 被内联,则可能缺少未确诊的定义。

在我的系统上,如果在没有优化的情况下编译和链接第二个程序,我会得到:

$ g++ test2.cc -o test2/tmp/ccdEsfxs.o:test2.cc:function main: error: undefined reference to 'S::i'collect2: error: ld returned 1 exit status

To make it work, a definition needs to be provided, like so:

struct S {
static const int i = 0;
};
const int S::i;

关于c++ - 这句话在 C++11 标准的第 §3.2/2 段中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23503013/

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