考虑下面的最小例子。

#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 declarationand 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/

10-10 21:35