首页 > 解决方案 > 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*'

标签: c++volatilemember-functions

解决方案


Volatility 和 constness 不会通过指针传播,但它们会通过数组传播。因此,在类的 volatile 实例中,firstElementPt它本身是 volatile,但它指向的东西不是。然而,这些intArray元素是易挥发的。您正在尝试将 volatile-pointer-to-a-non-volatile-int 指向volatile int. 这是不允许的。


推荐阅读