【发布时间】:2017-03-01 14:36:24
【问题描述】:
这基本上是my prior question 关于 DR 712 的延续。让我首先解释一下为什么我坚持看一些可能被认为是旧的东西,作为 C++11 标准,但我的问题是该部分[basic.def.odr] 在 C++11 中已经很难理解,我想在深入探讨当前草案中的同一部分之前完全涵盖这一点,在我看来,这更加复杂。
Austing Hastings 对我之前的问题的回答很好,但我在 C++11 的 [basic.def.odr]/2 中仍有一点不清楚。考虑这个小而非常简单的例子:
const int i = 1;
int main()
{
int j = i;
}
From [basic.def.odr]/2 in C++11 i is not odr-used in int j = i; as i 是满足出现要求的对象在常量表达式中,左值到右值的转换立即应用于i。这对我来说没有多大意义,因为i 在声明int j = i; 中被明确使用,正如在here 所示的稍微修改的代码中可以看到的那样,我强制变量i 不是优化了编译后的代码。
当然,我上面的推理肯定有问题,因为我不相信 C++11 在这样一个简单的例子中可能是错误的。再说一次,我现在错过了什么???
【问题讨论】:
-
您的示例代码中需要的只是
i的值。这意味着它可以被优化掉并且不需要分配存储空间。
标签: c++ c++11 language-lawyer one-definition-rule