Oli*_*liv 7 c++ initialization volatile language-lawyer
考虑这个功能:
void f(void* loc)
{
auto p = new(loc) volatile int{42};
*p = 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经通过clang,gcc和CL检查生成的代码,它们都没有在初始化时删除.(答案可能是硬件:).
它是编译器为标准提供的扩展吗?标准是否允许编译器不执行写42?
Actualy对于类类型的对象,指定对象的构造函数在不考虑volatile限定符[class.ctor]的情况下执行:
可以为const,volatile或const volatile对象调用构造函数.const和volatile语义(10.1.7.1)不适用于正在构造的对象.它们在最派生对象(4.5)的构造函数结束时生效.
[intro.execution]/8 列出了一致实施的最低要求;这些也称为\xe2\x80\x9c可观察行为\xe2\x80\x9d。第一个要求是\xe2\x80\x9c对易失性对象的访问严格按照抽象机的规则进行评估。\xe2\x80\x9d编译器需要产生所有可观察的行为。特别是,不允许删除对易失性对象的访问。请注意,这里的 \xe2\x80\x9cobject\xe2\x80\x9d 是在编译器编写器\xe2\x80\x99s 意义上使用的:它包括内置类型。
\n| 归档时间: |
|
| 查看次数: |
400 次 |
| 最近记录: |