在C++03中,是否可以使用非常值引用

Is a non-const rvalue reference possible in C++03?

本文关键字:非常 引用 可以使 是否 C++03      更新时间:2023-10-16

是否可以将函数返回的对象绑定到C++11之前该类型的纯虚拟超类型的非常量引用?

例如,假设我有这样的代码:

class IFoo
{
public:
    virtual void bar() =0;
};
class Foo : public IFoo
{
public:
    virtual void bar()
    { cout << "Hello, World!" << endl; };
};

在C++11中,我可以做到这一点:

IFoo && f = Foo();
f.bar();

我知道,我可以在C++11之前使用以下内容:

const IFoo & f = Foo();

但是,我不允许在f上调用任何非常量方法。在C++03中有办法绕过这个问题吗?

您可以使用const-cast:

const IFoo & f0 = Foo();
IFoo & f = const_cast<IFoo &>(f0);
f.bar();
Foo f_;
IFoo& f=f_;

这解决了您的样本问题。它可能无法解决你真正的问题。