为什么为单个赋值操作调用复制构造函数和重载赋值运算符
Why copy constructor and overloaded assignment operator are being called for a single assignment operation?
>我正在用 c++ 编写一个 String 类,但当我看到重载构造函数和重载赋值运算符被单个赋值操作调用时,我感到困惑。我认为在b ="检查"行中,字符串首先转换为String对象,因此调用了重载构造函数,然后调用了重载赋值运算符。
String::String(const char* s)
{
cout << "Overloaded Constructor::Stringn";
if (s != NULL)
{
size = strlen(s);
bufferPtr = new char[size+1];
strcpy(bufferPtr,s);
}
else
{
bufferPtr = NULL;
size = 0;
}
}
String & String::operator=(const String&rhs)
{
cout << "Operator=::Stringn";
if (this != &rhs) // check same assignment
{
size = rhs.size;
delete [] bufferPtr;
if(rhs.size != 0)
{
bufferPtr = new char[rhs.size+1];
strcpy(bufferPtr,rhs.bufferPtr);
}
else bufferPtr = NULL;
}
return *this;
}
String a = "FName";
String b("LUsama");
b = "Check";
`
Output:
Overloaded Constructor::String
Overloaded Constructor::String
Overloaded Constructor::String
Operator=::String
好吧,让我们看看...
-
a
构造函数 -
b
构造函数 - 临时对象构造函数(包含"检查"字符串(
- 临时对象通过操作员分配给
b
正如输出所示。什么让你感到困惑?
相关文章:
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- 两种类型的构造函数重载
- C++ 构造函数重载 - 为什么说我需要括号?
- C++具有多重继承的构造函数重载解析
- C++,处理多个构造函数重载和冗余代码
- c++ 构造函数重载歧义与initializer_list
- 父类有 26 个构造函数重载.如何在不复制+粘贴 26 个重载的情况下将一个小任务附加到所有构造器?
- 用户定义的构造函数重载与参数超类的重载不匹配
- 模板专用类之间的构造函数重载
- 指向构造函数重载的指针?
- C++简化了构造函数重载
- 类构造函数重载不起作用
- C++类模板构造函数 -- 重载引用 (U&) 与数组 (U*) 失败
- 为什么存在 C++11 std::initializer_list 构造函数重载规则
- 构造函数重载和默认参数
- 模板类构造函数重载解析
- 单例中的构造函数重载不起作用
- 构造函数重载选择了强制转换运算符而不是结构类型
- c++ 11构造函数重载解析和initialiser_lists: clang++和c++不一致.< / h1 &
- C++构造函数重载的经验法则