c++ - c ++:易失性实例中的易失性成员函数 - 将数组分配给指针是无效转换?
问题描述
考虑以下示例:
#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*'
?
解决方案
Volatility 和 constness 不会通过指针传播,但它们会通过数组传播。因此,在类的 volatile 实例中,firstElementPt
它本身是 volatile,但它指向的东西不是。然而,这些intArray
元素是易挥发的。您正在尝试将 volatile-pointer-to-a-non-volatile-int 指向volatile int
. 这是不允许的。
推荐阅读
- regex - 使用 PCRE2 库编译较少,--pattern='\$' 不起作用
- python - 搜索 MongoDB 数据库但 HTML 输入并在 webapp 上显示结果
- r - 如何在R中逐步查看函数的过程?
- grpc - 无法连接到 AWS Fargate 上的 gRPC 服务器
- node.js - 我将我的 ip 地址从 localhost 更改为公共 ip,但它不起作用。(对于 Mac)
- react-native - 返回上一个屏幕时重新获取usequery在本机反应中不起作用
- python - 我无法获得下面的代码片段来输出正确的结果
- c++ - C++ - 从文本文件中读取表格
- chromium - 如何允许在无头铬上获得地理定位
- scp - 尝试在 nohup 进程中进行 scp 时出现 pexpect 错误