在 C++03 中是否可以使用非 const 右值引用?
Is a non-const rvalue reference possible in C++03?
是否可以将从函数返回的对象绑定到 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 IFoo & f0 = Foo();
IFoo & f = const_cast<IFoo &>(f0);
f.bar();
Foo f_;
IFoo& f=f_;
这解决了您的示例问题。它可能无法解决您的实际问题。
是否可以将从函数返回的对象绑定到 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 IFoo & f0 = Foo();
IFoo & f = const_cast<IFoo &>(f0);
f.bar();
Foo f_;
IFoo& f=f_;
这解决了您的示例问题。它可能无法解决您的实际问题。