首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这里调用转换构造函数?

为什么这里调用转换构造函数?
EN

Stack Overflow用户
提问于 2014-05-05 14:50:27
回答 2查看 66关注 0票数 0

我试图了解代码中何时何地调用构造函数。

我创建了自己的、简单的、具有以下这些可能性的字符串类:

代码语言:javascript
复制
 String string1("hello world");


 string1 = "Hello march!!!";

对于后一个构造函数,这两个构造函数在字符串类中按顺序调用.

代码语言:javascript
复制
 converting-constructor

 copy-constructor

我能理解为什么调用复制构造函数,而不是真正为什么调用转换构造函数?

以下是这两个构造函数:

converting-constructor

代码语言:javascript
复制
 String::String(const char* ch) : _strPtr(0) {

   _strLen = strlen(ch) + 1;
   _strPtr = new char[_strLen];
   strncpy(_strPtr, ch, _strLen);
   _strPtr[_strLen - 1] = '\0';
   cout << "konverterings-constructor\n";
 }

copy-constructor

代码语言:javascript
复制
 String::String(const String& string) {

   _strLen = strlen(string._strPtr) + 1; // behöver ingen "djup-kopia" av vektorlängden.
   if(string.getString()) {
       _strPtr = new char[_strLen];
       strncpy(_strPtr, string._strPtr, _strLen);
       _strPtr[_strLen - 1] = '\0'; // null-terminering
   } else {
       _strPtr = 0;
   }
   cout << "copy-constructor\n";
}

重载成员.赋值函数-运算符

代码语言:javascript
复制
 String String::operator=(const String& string) {

   if (this == &string) { // kontrollera om objektet är lika med sig självt.
       return *this;
   }
   cout << "......\n";
   delete [] getString(); 

   _strLen = strlen(string.getString()) + 1;
   if(string.getString()) {
         _strPtr = new char[getLength()];
        strncpy(_strPtr, string.getString(), _strLen);
        _strPtr[_strLen - 1] = '\0'; // null-terminering
   } else {
       _strPtr = 0;
   }

  return *this;
}
EN

回答 2

Stack Overflow用户

发布于 2014-05-05 14:53:27

我能理解为什么调用复制构造函数,而不是真正为什么调用转换构造函数?

之所以调用转换构造函数,是因为当您分配时,由于没有接受const char*的赋值运算符,因此使用转换构造函数从RHS构造临时String,并用于分配给LHS。

注意,副本可以归结为赋值运算符按值返回的事实。对于赋值操作符来说,这是不寻常的。通常,它们返回一个引用。

票数 2
EN

Stack Overflow用户

发布于 2014-05-05 15:04:11

好的,首先,const数组(它是字符串文本的类型)衰变到指向const的指针。然后调用转换ctor从const char *构造字符串。然后调用operator在赋值操作符的返回中构造一个字符串。你应该以非参照的方式返回,这样才是惯用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23475449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档