gpt4 book ai didi

c++ - 基本类型 volatile 初始化是可观察的行为吗?

转载 作者:可可西里 更新时间:2023-11-01 18:39:51 26 4
gpt4 key购买 nike

考虑这个函数:

void f(void* loc)
{
auto p = new(loc) volatile int{42};
*p = 0;
}

我已经通过 clang、gcc 和 CL 检查了生成的代码,它们都没有省略初始化。 (答案可能被hardwer看到了:)。

它是编译器对标准提供的扩展吗?该标准是否允许编译器不执行写入 42?

实际上对于类类型的对象,指定对象的构造函数在不考虑 volatile 限定符 [class.ctor] 的情况下执行:

A constructor can be invoked for a const, volatile or const volatile object. const and volatile semantics (10.1.7.1) are not applied on an object under construction. They come into effect when the constructor for the most derived object (4.5) ends.

最佳答案

[intro.execution]/8 列出了符合要求的实现的最低要求;这些也被称为“可观察的行为”。第一个要求是“对 volatile 对象的访问严格按照抽象机的规则进行评估”。编译器需要产生所有可观察到的行为。特别是,不允许删除对 volatile 对象的访问。请注意,此处的“对象”是在编译器编写者的意义上使用的:它包括内置类型。

关于c++ - 基本类型 volatile 初始化是可观察的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46353373/

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