$5.2.11/7 - “[注:取决于
对象的类型,写操作
通过指针、左值或指针
到由 a 产生的数据成员
const_cast 抛弃 a
const 限定符68)may生产
未定义的行为 (7.1.5.1)。 ]”
本节(C++03)的措辞令我惊讶。令人惊讶的是两件事。
a) 首先,使用“可以”。为什么是“可能”?标准中的其他地方对于未定义的行为非常明确
b) 为什么放弃原来的 const 对象的常量而不是立即“未定义的行为”。为什么需要写操作才能触发UB?
a) 首先,使用“可以”。为什么是
它可能'?标准中的其他地方
非常确定
未定义的行为
不要太深入地研究这个词的用法may这里。关键是,在这种情况下放弃常量会导致未定义的行为。
C++ 标准经常使用“may”或“might”,如下所示:
1.3.12:未定义的行为may也可以预期,当这个国际
标准省略了任何描述
行为的明确定义。
强调我的。基本上,该标准使用“可能”一词,如“被允许 http://www.macmillandictionary.com/dictionary/american/may#may_31".
b) 为什么要抛弃
原始 const 对象的常量
不是立即“未定义”
行为'。为什么写是
是否需要触发UB?
写入会触发 UB,因为 const 对象可能会存储在某些平台上的只读内存中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)