加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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引用作为参数,你似乎没有修改参数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读