gpt4 book ai didi

c++ - C++中类对象的赋值

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:18 26 4
gpt4 key购买 nike

如果这是重复的问题,我很抱歉,但我没有找到关于这个问题的讨论。所以,我正在学习 C++,但我不理解以下关于为类对象赋值的问题。我有这个类 T 的实现:

class T
{
int aInt;
double aDouble;

public:
T():aInt(0),aDouble(0.){}

T(int my_aInt, double my_aDouble):aInt(my_aInt), aDouble(my_aDouble){}

T(int my_aInt):aInt(my_aInt), aDouble(0.){}

T(double my_aDouble):aInt(0), aDouble(my_aDouble){}

void set_aInt(int my_aInt){
aInt = my_aInt;
}

void set_aDouble(double my_aDouble){
aDouble = my_aDouble;
}

int get_aInt(){
return aInt;
}

double get_aDouble(){
return aDouble;
}
};

我想创建这个类的对象并为它们赋值。我可以这样做:

T tt1(-1, 5.), tt2(-1), tt3(5.);

而且效果很好。现在我想更改分配给对象 tt1 的值。我知道我可以这样做:

tt1.set_aInt(-3); // gives aInt = -3, aDouble = 0
tt1.set_aDouble(6.); // gives aInt = 0, aDouble = 6.

而且它也很好用。但似乎还有另一种方法可以做到这一点:

tt1 = -3; // gives aInt = -3, aDouble = 0
tt1 = 6.; // gives aInt = 0, aDouble = 6.
tt1 = (-3, 6.); // gives aInt = 0, aDouble = 6. - Why?

我的第一个问题是:tt1 = -3; 是否等同于 tt1.set_aInt(-3);,这是一个好的做法吗?第二个问题是 tt1 = (-3, 6.); 有什么问题,为什么它将 aInt 的值设置为 0 -3

最佳答案

您应该将单参数构造函数标记为explicit,因为定义单参数构造函数还会创建从参数类型到 C++ 中构造类型的隐式转换,这通常是不需要的。

tt1 = -3;

因此等于:

tt1 = T(-3);

即它使用复制/移动分配。在第二种情况下,(-3, 6.) 只是语句 -3, 6. 周围的括号,其中 , 是序列运算符。因此,该语句的计算结果为 6.,并选择了使用 double 构造函数的隐式转换。

关于c++ - C++中类对象的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39791112/

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