- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
4天前关闭。
Improve this question
编译器不自动生成volatile赋值操作符,从而阻止赋值的原因是什么?
举个最小的例子:
struct A{};
A a;
volatile A b;
b = a;
4天前关闭。
Improve this question
编译器不自动生成volatile赋值操作符,从而阻止赋值的原因是什么?
举个最小的例子:
struct A{};
A a;
volatile A b;
b = a;
1条答案
按热度按时间ctzwtxfj1#
我想你是指为什么当你创建一个类的时候
得到的赋值运算符是
而不是
所以volatile glvalue不能在任何一边。
原因可能与成本有关。易失性对象会抑制某些优化,而限定符则会依附于子对象(都在
const_cast
的痛苦之下)。它们在野外也非常罕见,就像真的一样,实际上从来没有人声明过volatile类对象。如果C默认生成了volatile赋值运算符,那么所有代码都将需要在默认情况下付出代价,尽管他们没有使用volatile对象,但是C是用相反的哲学设计的,我们不为我们不使用的东西付费。如果你正在处理一个需要创建volatile对象的库,并且它在这一点上崩溃了,那么它的设计就很糟糕。但是老实说,很可能这个库从来没有指望过将它的对象声明为volatile,所以也许你应该重新考虑这样做。