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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |