C++标准第12.1.14段的基本原理是什么
What is the rationale for paragraph 12.1.14 of the C++ standard?
这来自C++11。
在构造
const
对象期间,如果访问对象或其任何子对象的值通过不是直接或间接从构造函数的this指针获得的glvalue由此获得的对象或子对象的大小是未指定的。示例:struct C; void no_opt(C*); struct C { int c; C() : c(0) { no_opt(this); } }; const C cobj; void no_opt(C* cptr) { int i = cobj.c * 100; // value of cobj.c is unspecified cptr->c = 1; cout << cobj.c * 100 // value of cobj.c is unspecified << ’n’; }
--结束示例]
为什么它只适用于const
对象?
要真正理解理由,您需要与委员会成员沟通,或者至少阅读相关讨论。我帮不了你。
这在上下文中的目的是对const对象的构造施加比一般应用更严格的限制。S12.7中详细介绍了通常适用的规则,它们主要集中在对象的寿命上。例如,它们并不禁止混叠。
对const对象的限制将允许实现者采取更积极的优化策略。例如,一个对象可能在平移时构建,或者通过将其从循环中提升出来只构建一次,或者完全优化。由于const对象不会改变,编译器通常不必担心混叠,但(如示例代码所示)在这种特殊情况下,他们会担心。
我忍不住想,一定有这样的情况,这个规则可以防止其他一些外部可见的违反const要求的行为。给出的例子不是这样的情况,我也没能找到一个。也许其他一些贡献者可以提供帮助。
相关文章:
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 这段代码"seperature | | i"是什么意思?
- 追问:C++14/C++17 中的变量到底是什么?
- 将字段(在类中)定义为引用的缺点是什么?
- 在 C++14 中,这种 C++17 倍表达的好选择是什么?
- 这个(const vector<vector<int> > &A)"代码段是什么意思?
- 使用静态类成员而不是私有字段之间的速度差异是什么?
- 从CSV文件中提取每个条目字段的最佳方法是什么
- 在这段 python 代码中,大于符号是什么意思
- 这段代码的输出是什么,它在构造函数中使用 strcpy?
- Stype字段的目的是什么
- 这段代码的作用是什么?
- C++标准第12.1.14段的基本原理是什么
- 结构中位字段的用是什么
- C++14变量模板:它们的用途是什么?任何用法示例
- 这段代码的 Big-O 表示法是什么
- 这段关于函数对象的内容是什么
- C++向量,这段代码是什么意思
- c++标准14.8.2第3段和第4段的含义是什么?