gpt4 book ai didi

c++ - 必须遵守未使用的 volatile 参数吗?

转载 作者:IT老高 更新时间:2023-10-28 23:20:41 25 4
gpt4 key购买 nike

如果我调用一个具有 volatile 参数的函数,并且该参数没有被使用,那么编译器是否还必须生成该参数?

void consume( volatile int ) { }

...

consume( some_expr );

GCC 确实尊重这一点,但我不确定标准中 volatile 的措辞是否需要这一点。在我看来,GCC 做的是正确的事——这在逻辑上是对 volatile 变量的赋值,因此不应省略(根据 c++ 标准的 1.9-8)

注意: 这样做的目的是防止优化器删除代码的评估。也就是说,它强制评估 some_expr。它允许优化表达式,但确保实际执行。

我已将 C 和 C++ 添加为标签,因为如果有任何差异,我会对此感兴趣。不过我不认为会有。

回答:我选择了第一个,因为我相信它是该标准的正确实际实现。然而,史蒂夫的哲学观点很有趣,实际上可能意味着标准是模棱两可的。

最佳答案

consume 的未命名参数无法读取,因为它未命名。但是,它已被初始化,并且该初始化(使用 some_expr)是一个可见的副作用。因此编译器可能不会优化初始化。

这是否需要对 some_expr 进行实际评估是另一回事。一般来说,这不是一个可见的副作用,但它可能是如果 some_expr 包含 volatile 子表达式。

[编辑]请注意,“未命名”部分可能出现在两个地方。调用者通常无法知道参数是否被命名(更不用说使用了)例如

void consume( volatile int x);
consume( some_expr );
// other .cpp
void consume( volatile int ) { } // Same function.

关于c++ - 必须遵守未使用的 volatile 参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10123935/

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