jma*_*erx 3 c++ gcc visual-c++
在msvc中,我有这样的函数,它构建但在gcc中它不喜欢它.
void classname::a(std::string &text)
{
stdStringFromClass = text;
}
void classname::b(char *text)
{
a(std::string(text));
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是&,gcc我觉得很担心,因为我刚刚创建了std :: string,通过引用传递是有风险的,所以它不构建,但msvc甚至没有警告我.
为什么这个错误的c ++到gcc我一直听说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*)
Run Code Online (Sandbox Code Playgroud)
这可以吗?
void classname::a(std::string &text)
{
stdStringFromClass = text;
}
void classname::b(char *text)
{
std::string k = text;
a(k);
}
Run Code Online (Sandbox Code Playgroud)
我认为这是Visual Studio当时支持的旧编译器扩展,但它在现代Visual C++中保持兼容性.尝试禁用编译器扩展(/Za标志),看看会发生什么.
或者,使用该/W4标志来获得最大警告,它应该抱怨:
警告C4239:使用非标准扩展
在GCC上我得到const引用错误:
错误:从'std :: string'类型的临时值初始化'std :: string&'类型的非const引用