c – 为什么msvc让我这样做而不是gcc / g?
发布时间:2020-12-16 10:17:43 所属栏目:百科 来源:网络整理
导读:在msvc中,我有这样的函数,它构建但在 gcc中它不喜欢它. void classname::a(std::string text){ stdStringFromClass = text;}void classname::b(char *text){ a(std::string(text));} 这里的问题是,gcc我觉得很担心,因为我刚创建了那个std :: string,通过引用
在msvc中,我有这样的函数,它构建但在
gcc中它不喜欢它.
void classname::a(std::string &text) { stdStringFromClass = text; } void classname::b(char *text) { a(std::string(text)); } 这里的问题是&,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*) 这可以吗? void classname::a(std::string &text) { stdStringFromClass = text; } void classname::b(char *text) { std::string k = text; a(k); } 解决方法
我不知道为什么Visual Studio允许你编译它,但你不能传递对匿名对象的引用.
编辑:它可以用于const引用,因为你可以传递临时对象作为参考,只是能够修改它没有意义.这就是我们在C 0x中有rvalue引用的原因. 编辑2:对于你的编辑,肯定会解决问题,或者只是在a()方法中将const引用作为参数,你似乎没有修改参数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |