c ++:易失性实例中的易失性成员函数-将数组分配给指针是无效转换吗?
c++: volatile member function in volatile instance - assigning array to pointer is invalid conversion?
考虑以下示例:
#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 意味着将隐藏的 *this
指针标记为 volatile。那么为什么赋值 firstElementPt = intArray;
仍然不允许并导致 error: invalid conversion from 'volatile int*' to 'int*'
?
易变性和常量不通过指针传播,但它们确实通过数组传播。所以在 class 的 volatile 实例中,firstElementPt
本身是 volatile,但它指向的东西不是。然而,intArray
元素是不稳定的。您正在尝试将指向非易失性整数的易失性指针指向 volatile int
。这是不允许的。
考虑以下示例:
#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 意味着将隐藏的 *this
指针标记为 volatile。那么为什么赋值 firstElementPt = intArray;
仍然不允许并导致 error: invalid conversion from 'volatile int*' to 'int*'
?
易变性和常量不通过指针传播,但它们确实通过数组传播。所以在 class 的 volatile 实例中,firstElementPt
本身是 volatile,但它指向的东西不是。然而,intArray
元素是不稳定的。您正在尝试将指向非易失性整数的易失性指针指向 volatile int
。这是不允许的。