考虑下面的最小例子。
#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;
}
这给出了关于
expecting ';' at the end of declaration
和 and expected un-qualified-id before '{'
的错误。我能知道我做错了什么吗?在实际代码中,我想避免通过临时变量调用非静态成员函数。
试过 gcc 4.7.2 和 vc2010。
谢谢。
最佳答案
答案很简短:VC10 和 GCC 4.7.2 不支持引用限定符。
但是,请注意您的 foo()
函数有一个左值引用限定符,这意味着您不能在临时对象上调用它。
如果您还希望编译此表达式:
A().foo();
然后你应该使用
const&
,或者为 &&
提供一个重载,就像在这个 live example 中一样。要使用引用限定符,您可以使用 Clang 3.2 或 GCC 4.8.1。
关于c++ - ref 限定符在 gcc4.7.2 和 vc10 中给出错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16883898/