以下代码使用两个不同的编译器进行编译,一个生成预期结果,另一个没有输出(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的构造函数时似乎没有复制构造函数调用。