在 msvc 中,我有这样的函数,并且可以构建,但在 gcc 中却不行。
void classname::a(std::string &text)
{
stdStringFromClass = text;
}
void classname::b(char *text)
{
a(std::string(text));
}
这里的问题在于&,gcc认为由于我刚刚创建了那个std::string,通过引用传递是有风险的,所以它不会编译,但msvc甚至没有警告我。
为什么在gcc中这是不正确的c++代码?我一直听说msvc比gcc更严格。
谢谢
错误信息
AguiWidgetBase.cpp: In member function ‘void AguiWidgetBase::setText(char*)’:
AguiWidgetBase.cpp:91:27: error: no matching function for call to ‘AguiWidgetBase::setText(std::string)’
AguiWidgetBase.cpp:80:6: note: candidates are: void AguiWidgetBase::setText(std::string&)
AguiWidgetBase.cpp:88:6: note: void AguiWidgetBase::setText(char*)
这样可以吗?
void classname::a(std::string &text)
{
stdStringFromClass = text;
}
void classname::b(char *text)
{
std::string k = text;
a(k);
}
char*
(应该是const char*
)和std::string
重载?std::string
可以从const char*
隐式构造。 - GManNickGclass
的类吗? - Arunclass
作为类名感到惊讶。由于SO已经存档,我认为这不是一个好的存档示例。我的评论本来是幽默的:(,尽管我没有放笑脸:)。 - Arun