我真的不能想到一个特定的标题,因为我真的不知道怎么说出来。我真的很困惑,因为我之前的问题没有真正得到解答,但只会让我更加困惑。我的另一个question问了
在定义期间将std :: string设置为0,将std :: string设置为0
用户mnciitbhu表示他在GCC 5.2上收到错误。我正在使用Microsoft Visual Studio,所以我在Code :: Blocks上尝试过它,并且没有错误。除此之外,我想为自己尝试一下。我有一个班级 - Test
class Test {
public:
Test(const Test& T) {
std::cout << "COPY CTOR\n";
}
Test(){
std::cout << "DEFAULT CTOR\n";
}
Test(int NUMBER) {
std::cout << "INT CTOR CALLED\n";
}
};
在我的主要功能中,当我做
时Test t1 = 5;
t1 = 10;
输出
INT CTOR CALLED
INT CTOR CALLED
现在我感到困惑的是当你做Test t1 = 5
时,另一个问题的用户表示会创建一个临时的Test
,然后调用复制构造函数。这从不调用复制构造函数。另外,参考我的另一个问题;当我做的时候
// text = std::string
text = NULL;
其中一个答案说它没有用,因为它没有定义operator=
。我的Test
类也没有定义它,但是做了
t1 = 10;
仍然有效并再次调用构造函数。另一个question上的用户说,在这种情况下,它会调用赋值运算符。从输出中可以看出,这没有。那么有人可以非常详细地解释为什么
std::string text = NULL;
text = NULL;
给我一个错误,
Test t1 = 5;
t1 = 10;
工作,不调用复制构造函数,并调用构造函数两次。
=
实际上在做什么?为什么在我t1 = 10
答案 0 :(得分:-3)
通常NULL定义为((void*)0)
,std::string
不知道如何从void *指针构造字符串,std :: basic_string只是没有这样的构造函数。
尝试
std::string text = (const char*)0;
代替。