gpt4 book ai didi

c++ - "const method"读取成员变量编译错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:28:42 24 4
gpt4 key购买 nike

我想知道为什么第一个“const 方法”会出现编译错误,而第二个却可以。

typedef struct xyz{
uint16_t xyz1[16];
}XYZ;

class A {
public :
A() :m_a1(4) { m_a2 = new XYZ[4]; }
void getSomething() const
{
uint16_t* p = m_a1[0].xyz1; //error: invalid conversion from
//'const uint16_t* {aka const short unsigned int*}'
//to 'uint16_t* {aka short unsigned int*}'
}
voi getSomething2() const
{
uint16_t* p = m_a2[0].xyz1; //compile OK
}
private:
vector<XYZ> m_a1;
XYZ* m_a2;
};

最佳答案

const 中成员函数,所有非静态数据成员都被视为 const也是,那么m_a1变成 const vector<XYZ> .有一个const std::vector::operator[] 过载, 所以执行 operator[]在常量上std::vector<XYZ>你会得到一个 const XYZ ;谁的成员xyz1变成 const也;即 const uint16_t [16] , 这将衰减到 const uint16_t*并且无法转换为 uint16_t*含蓄地。

另一方面,对于数据成员m_a2与类型 XYZ*在 const 成员函数中,将变为 XYZ* const (注意它不是 const XYZ* )。即指针本身是 const ,但不是指针。然后用 operator[] ,它仍然会返回一个 XYZ , 不是常量 XYZ .这就是它适用于以下语句的原因。

关于c++ - "const method"读取成员变量编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44235486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com