【发布时间】:2019-09-30 22:03:41
【问题描述】:
考虑以下示例:
#include <iostream>
class C {
int intArray[2] { 1, 2 };
int *firstElementPt;
public:
int getFirstElement() volatile {
firstElementPt = intArray;
return *firstElementPt;
};
};
int main()
{
volatile C c;
std::cout << c.getFirstElement();
}
这给了我以下编译错误:
In member function 'int C::getFirstElement() volatile':
10:28: error: invalid conversion from 'volatile int*' to 'int*' [-fpermissive]
我是 C++ 新手。我读到将实例声明为 volatile 会隐含地使其所有成员变量都变为 volatile。我读到将成员函数声明为 volatile 意味着将隐藏的 *thispointer 标记为 volatile。那么为什么分配firstElementPt = intArray; 仍然不允许并导致error: invalid conversion from 'volatile int*' to 'int*'?
【问题讨论】:
-
作为 C++ 新手,您应该忘记
volatile的存在。你永远不需要它。 -
int *表示指向非易失性 int 的指针。在 volatile 类中,这将是指向非 volatile int 的 volatile 指针。 s/volatile/const 也会出现同样的“问题” -
@M.M 使用 const 没问题,无论如何你不能指定一个。
-
@n.m.从 ISR 和 Arduino 程序中的“主”代码访问的变量怎么样?那是我的用例...
-
@x-ray —
volatile不是合适的工具。有许多多线程支持类和函数。
标签: c++ volatile member-functions