3

考虑下面的最小示例。

#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 上试过。谢谢。

4

1 回答 1

7

答案很简短:VC10 和 GCC 4.7.2 不支持引用限定符。

但是,请注意您的foo()函数有一个左值ref 限定符,这意味着您不能在临时对象上调用它。

如果你希望这个表达式也能编译:

A().foo();

然后你应该使用const&,或者提供一个重载&&,就像这个活生生的例子一样。

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

于 2013-06-02T14:52:45.733 回答