无法更改volatile变量的值
Cannot change value of volatile variable
描述:
当变量被定义为volatile(在Main中)时,我不能设置或更改它。删除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 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;
}
(为了便于阅读,我缩短了你的类名。)
这里有一个更完整的例子:
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上下文中没有左值到右值的转换,因此没有访问。我们将转换明确化。
volatile PlaceParentConversion& operator =(const PlaceParentConversion&) volatile;
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 未能优化看似明显的循环不变量(但volatile限定符发挥了神奇的作用)
- 读取互斥对象范围之外的volatile变量,而不是std::atomic
- Can编译器有时会缓存声明为volatile的变量
- volatile变量在一个客户线程和一个生产者线程中是否安全
- 无法更改volatile变量的值
- `volatile’在线程之间同步变量
- 其他线程会在合理的时间内看到对“volatile”字大小变量的写入吗
- 为什么volatile变量即使在非常简单的情况下也没有优化
- 如果我在互斥锁之间声明一个变量并返回它,我需要使用volatile关键字吗?
- 变量的const和volatile的顺序
- visual是在c++中访问不从函数外部访问的volatile局部变量的可观察行为
- 是否所有全局变量都是volatile限定的?
- 为什么volatile局部变量的优化与volatile自变量不同,以及为什么优化器会从后者生成无操作循环