C ++:具有略微不同签名的基类构造函数

时间:2015-09-04 12:47:56

标签: c++

以下代码使用两个不同的编译器进行编译,一个生成预期结果,另一个没有输出(gcc,C ++ 98)。

B类继承A类,并使用稍微不同的签名调用其构造函数,并传递一个字符串。

#include <iostream>
#include <string>

using namespace std;

class A
{
protected:
  A ( string s )                   // <-- no const reference here
  {
    cout << "s: " << s << endl;
  }
};

class B : public A
{
public:
  B ( const string & s )
    : A( s )
  {}
};

int main ( int, char ** )
{
  B b( "Hi folks!" );

  return 0;
}

//预期结果:“嗨伙计!”

请注意对B的构造函数中的字符串的const引用,而A的构造函数按副本传递字符串。

调试器(ddd)显示输出的字符串s不包含传入的字符但是包含垃圾。它似乎不是默认构造的。但是,在一个平台上,字符串出现在终端中,但不会出现在另一个平台上。

我想知道为什么在将字符串传递给A的构造函数时似乎没有复制构造函数调用。

0 个答案:

没有答案