gpt4 book ai didi

c++ - 无法更改 volatile 变量的值

转载 作者:行者123 更新时间:2023-11-30 03:00:50 25 4
gpt4 key购买 nike

描述:

当变量定义为 volatile(在 Main 中)时,我无法设置或更改它。删除 volatile 可以解决问题,但我需要我的变量是 volatile。

我的尝试:

确实有很多尝试。重载 operator=,使新的 operator= volatile,使新的 volatile 方法。到目前为止,没有任何实际效果。

我的主要内容:

int main() {
volatile PlaceParentConversion s(10.0); // remove volatile = no errors
std::cout << s.mX << std::endl;
s = PlaceParentConversion::IDENTITY_CONVERSION;
std::cout << s.mX << std::endl;
return 0;
}

我的类(class):

class PlaceParentConversion {
public: //all public, easier to check
const static PlaceParentConversion IDENTITY_CONVERSION;
double mX;
PlaceParentConversion(const double x);
PlaceParentConversion(const PlaceParentConversion& other);
};

const PlaceParentConversion PlaceParentConversion::IDENTITY_CONVERSION(0);

PlaceParentConversion::PlaceParentConversion(const double x) : mX(x) {}
PlaceParentConversion::PlaceParentConversion(const PlaceParentConversion& other) : mX(other.mX) {}

错误:

‘volatile PlaceParentConversion’ as ‘this’ argument of ‘PlaceParentConversion& PlaceParentConversion::operator=(const PlaceParentConversion&)’ discards qualifiers [-fpermissive] 

最佳答案

定义一个volatile赋值运算符:

Foo volatile & operator=(Foo const & rhs) volatile
{
// ...
return *this;
}

(为了便于阅读,我缩短了您的类(class)名称。)


这是一个更完整的例子:

struct Foo
{
Foo() { }
Foo(Foo const volatile &) { }
Foo volatile & operator=(Foo const &) volatile
{ return *this; }
};

int main()
{
volatile Foo x;
Foo y;
static_cast<Foo>(x = y);
}

最后一行中的静态转换使 GCC 不会发出警告,即没有访问 volatile 对象,这是赋值表达式评估的结果:标准说在 void 上下文中没有左值-到右值转换,因此无法访问。我们使转换明确。

关于c++ - 无法更改 volatile 变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11673984/

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