gpt4 book ai didi

具有重载 = 运算符的 C++ 包装器

转载 作者:行者123 更新时间:2023-11-30 01:31:59 25 4
gpt4 key购买 nike

我正在尝试围绕 int 开发一个非常简单(目前)的包装器类,并希望重载 = 运算符以实现如下内容:

class IntWrapper
{
...
private:
int val;
}

int main ( )
{
IntWrapper a;
int b;

a = 5; // uses overloaded = to implement setter
b = a; // uses overloaded = to implement getter
}

不过,我认为这是不可能完成的。实现 setter 非常简单,类似于:

class IntWrapper
{
...
IntWrapper& operator = (int rhs) { this.val = rhs; return *this; }
...
}

但是,通过一些谷歌搜索,我了解到没有办法以这种方式执行 getter。我的理解是,这是因为 = 运算符只能被重写以将 赋值给 一个变量,并且由于 int 是原始类型,我们不能重写其对 = 的默认实现。它是否正确?如果没有,我该如何编写 getter?

如果那是正确的,有没有人对类似的事情有任何优雅的建议?我能找到的最接近的是重载转换运算符:

class IntWrapper
{
...
operator int( ) { return this.val; }
...
}

int main ( )
{
...
b = (int) a;
...
}

虽然对我来说这似乎毫无意义,因为它几乎不比简单的 getVal() 方法好多少。

感谢您的任何建议!

最佳答案

您不需要强制转换来调用转换函数。一个普通的

b = a;

也会调用它。这样,我可以看出它比 getVal 函数使用起来更方便。虽然我一般不使用转换函数。我更喜欢显式的 getVal 函数。特别考虑这个

struct W {
W(int);
operator int();
};

int main() {
W w = 42;
int a = true ? 0 : w; // Ambiguity! What conversion direction?
}

它很快就会失控......

关于具有重载 = 运算符的 C++ 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375533/

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