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

c – ref限定符在gcc4.7.2和vc10中给出错误

发布时间:2020-12-16 09:45:20 所属栏目:百科 来源:网络整理
导读:考虑以下最小的例子. #includeiostreamstruct A{ A(){std::cout"def"'n';} void foo(){std::cout"called on lvalue"'n';}};int main(){ A a; a.foo(); A().foo(); return 0;} 这给出了关于期待’;’的错误在声明结束时和'{‘之前预期的非限定id. 我能知道
考虑以下最小的例子.

#include<iostream>

struct A
{
    A(){std::cout<<"def"<<'n';}
    void foo()&{std::cout<<"called on lvalue"<<'n';}
};

int main()
{   
    A a;
    a.foo();
    A().foo();
    return 0;
}

这给出了关于期待’;’的错误在声明结束时和'{‘之前预期的非限定id.

我能知道我做错了什么吗?在实际的代码中我想避免通过temporaries调用非静态成员函数.

试过gcc 4.7.2和vc2010.
谢谢.

解决方法

答案很简短:VC10和GCC 4.7.2不支持ref-qualifiers.

但是,请注意您的foo()函数具有左值ref限定符,这意味着您无法在临时值上调用它.

如果您还希望编译此表达式:

A().foo();

那么你应该使用const&或者为&&提供过载,就像在这个live example中一样.

要使用ref-qualifiers,您可以使用Clang 3.2或GCC 4.8.1.

(编辑:李大同)

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

    推荐文章
      热点阅读