Cal*_*602 7 c++ visual-studio-2010
请考虑以下代码:
class TextMessage{
public :
TextMessage(){};
TextMessage(std::string _text):text(_text){}
std::string text;
friend std::ostream & operator<<( std::ostream & os, const TextMessage & m);
};
std::ostream & operator<<( std::ostream & os, const TextMessage & m){
return os << "text message : " << m.text;
}
Run Code Online (Sandbox Code Playgroud)
为什么在地球上:
顺便说一句,取而代之的m.text是m.text.c_str()作品.
Pup*_*ppy 14
我猜你没错#include <string>.因此,当编译器输出a时std::string,它不能,并开始寻找隐式转换 - 而对TextMessage的隐式构造函数看起来就像是账单.但等等 - 现在我们在TextMessage的输出函数和bam中输出一个TextMessage.
我唯一能想到的是它没有运算符<< for std :: string所以它寻找转换并找到一个参数构造函数TextMessage(std :: string).
通常建议通过使它们显式来防止对一个参数构造函数的意外调用.
explicit TextMessage(std::string _text):text(_text){}
Run Code Online (Sandbox Code Playgroud)
然后它不会考虑隐式转换的构造函数.