Kou*_*tty 3 c++ g++ visual-studio-2010 c++11
考虑以下最小的例子.
#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;
}
Run Code Online (Sandbox Code Playgroud)
这给出了关于expecting ';' at the end of declaration和的错误and expected un-qualified-id before '{'.
我能知道我做错了什么吗?在实际的代码中我想避免通过temporaries调用非静态成员函数.
试过gcc 4.7.2和vc2010.谢谢.
答案很简短:VC10和GCC 4.7.2不支持ref-qualifiers.
但是,请注意您的foo()函数具有左值 ref限定符,这意味着您无法在临时值上调用它.
如果您还希望编译此表达式:
A().foo();
Run Code Online (Sandbox Code Playgroud)
然后你应该使用const&或提供重载&&,如在这个实例中.
要使用ref-qualifiers,您可以使用Clang 3.2或GCC 4.8.1.
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |