GCC 关于隐式取消引用的警告
GCC warning about implicit dereference
我刚刚在GCC中遇到了以下警告:
warning: implicit dereference will not access object of type ‘volatile util::Yield’ in statement [enabled by default]
编译此代码时:
volatile util::Yield y1;
util::Yield y2;
y1 += y2; // <--- Warning triggered here.
不幸的是,我不太明白 GCC 想告诉我什么......
类 Yield 声明如下:
class Yield {
public:
Yield();
Yield &operator+=(Yield const &other);
Yield &operator+=(Yield const volatile &other);
Yield volatile &operator+=(Yield const &other) volatile;
Yield volatile &operator+=(Yield const volatile &other) volatile;
// Other operators snipped...
};
有什么想法吗?
谢谢!
摘自 GCC 手册第 6.1 节 - 何时访问易失性对象?
使用对易失性的引用时,G++ 不会将等效表达式视为对易失性的访问,而是发出警告,指出不访问易失性。这样做的理由是,否则很难确定易失性访问发生的位置,并且不可能忽略返回易失性引用的函数的返回值。同样,如果您希望强制读取,请将引用强制转换为右值。
警告源于以下事实:+= 运算符返回对易失性对象的引用,而表达式 'y1 += y2' 忽略该返回值。编译器会让您知道引用实际上不会被取消引用(即不会读取易失值)。
相关文章:
- 隐式重新解释引用时强制转换,没有警告/错误
- 警告 C4101 未引用的局部变量
- 链接时突然收到maxrregcount警告和未定义的引用错误
- 警告:返回对临时 - 奇怪情况的引用(对 Rvalue 的澄清)
- 是否有将引用返回到临时引用的C++警告?
- 为什么 ++ 运算符触发器返回对局部变量警告的引用
- C++ 当容器在使用前被破坏/修改时发出警告(通过引用元素或迭代器使用)
- 是否有任何C++编译器可以发出悬而未决的引用警告?
- 警告#13212:引用需要堆栈对齐功能的EBX
- 使用引用不会导致有关未定义行为的警告
- 三元运算符:编译器不发出局部变量警告的返回引用
- 为什么 C++ 编译器不警告返回对局部变量的引用
- 模板类型推导警告返回对本地临时对象的引用
- 为什么 g++ 警告返回对临时的引用
- 返回对函数参数的引用时没有 clang 警告
- 尝试将 std::vector<std::p air<T, U>> 转换为其左值引用时收到 VS 编译器警告 C4239
- GCC 关于隐式取消引用的警告
- 警告-未引用的内联函数已被删除
- 如何在没有编译器警告的情况下返回对空字符串的 const 引用?
- 没有返回对局部变量的引用的编译器警告