gpt4 book ai didi

c++ - 强制编译器选择 const 运算符重载

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

我正在尝试模拟缓存。当给定一个数组时,我必须确定 operator[](size_t i) 是用于获取数据还是用于设置数据。我在 get 部分的签名中使用 const 重载了它,而 set 部分没有使用它。

我的问题是,由于数组是动态分配的,所以只有非常量 operator[] 被调用。例如:

    class A {    
int n;
double *v;
public:
A(int i) : n(i),v(new double[i]) {}
const double & operator[](int i) const {
cout<<"get"<<endl ;
return v[i];
}
double& operator[](int i) {
cout<<"set"<<endl;
return v[i];
}
};
int main(){
double pi = 3.14;
A a(10);
a[2] = pi;
pi = a[3];
}

结果是

 set
set

但我希望打印

set
get

最佳答案

它与动态分配的数组没有任何关系。您的变量 a 不是 const,因此将在其上调用非 const 函数。如果您有 const B b(10); 并执行了 b[3],则将调用 const 版本。

如果你真的想要,你可以通过强制转换为 const 引用来强制调用 const 版本:

static_cast<const A&>(a)[3]

(或者,创建一个引用变量并调用它)

关于c++ - 强制编译器选择 const 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22133045/

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