复制构造函数未被调用,无法理解赋值运算符的工作方式
Copy constructor not being called, trouble understanding how the assignment operator works
我真的想不出一个具体的标题,因为我真的不知道如何用词。我真的很困惑,因为我之前的问题没有得到真正的答案,只会让我更加困惑。问了我另一个问题
在定义过程中将std::string设置为0与将std::字符串设置为0
用户mnciitbhu表示,他在GCC 5.2上遇到了一个错误。我使用的是Microsoft Visual Studio,所以我在代码::块上进行了尝试,没有出现任何错误。除此之外,我还想亲自尝试一下。我有一个类-Test
class Test {
public:
Test(const Test& T) {
std::cout << "COPY CTORn";
}
Test(){
std::cout << "DEFAULT CTORn";
}
Test(int NUMBER) {
std::cout << "INT CTOR CALLEDn";
}
};
在我的主要功能中,当我进行时
Test t1 = 5;
t1 = 10;
输出是
INT CTOR CALLED
INT CTOR CALLED
现在我感到困惑的是,当你执行Test t1 = 5
时,另一个问题上的用户说它将创建一个临时Test
,然后调用复制构造函数。这从不调用复制构造函数。此外,关于我的另一个问题;当我做的时候
// text = std::string
text = NULL;
其中一个答案说它不起作用,因为它没有定义operator=
。我的Test
类也从未定义过它,但正在进行
t1 = 10;
仍然有效,并再次调用构造函数。另一个问题的一个用户说,在这种情况下,它调用赋值运算符。从输出中可以看出,这并没有。那么,有人能详细解释一下的原因吗
std::string text = NULL;
text = NULL;
给我一个错误,
Test t1 = 5;
t1 = 10;
有效,并且不调用复制构造函数,并且调用构造函数两次。
=
实际在做什么?为什么当我执行t1 = 10
时它会调用构造函数
通常NULL被定义为((void*)0)
,而std::string
不知道如何从void*指针构造字符串,std::basic_string根本没有这样的构造函数。
尝试
std::string text = (const char*)0;
相反。
相关文章:
- 重载Singly Linked List中的赋值运算符
- 使用赋值运算符重载从类中返回jobject
- 标准库类型的赋值运算符的引用限定符
- 复制构造函数、赋值运算符C++
- 标准::变体的赋值运算符
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 基类和派生类的多态赋值运算符
- 为用户定义的类正确调用复制构造函数/赋值运算符
- CRTP 中的复制赋值运算符 - gcc vs clang 和 msvc
- 为什么初始化时没有调用重载赋值运算符?
- 赋值运算符重载和自赋值
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- Qt PL/SQL - 赋值运算符 - 字符串缓冲区太小
- 对 r 值使用移动赋值运算符时的异常
- 由于没有使用赋值运算符,映射的值是如何初始化的?
- 默认赋值运算符如何在实际 STL 中实现
- 使用赋值运算符复制 std::vector
- C++ 通过自定义赋值运算符隐式转换函数参数
- 赋值运算符的奇怪行为
- 复制构造函数未被调用,无法理解赋值运算符的工作方式