我有一堂课Foo
。Foo
有一些非常量方法。我可以在临时Foo
对象上调用非常量方法;我只对方法实际返回的内容感兴趣,而不是它们对Foo
对象本身的作用。
第一个问题:这本身是否必然表明该类Foo
设计得不好?
第二个问题:如果我想按Foo
原样继续,但我仍然希望能够Foo
通过引用将调用非常量方法的函数来传递对象,那么最好的方法是什么?
这就是我得出的结论:
// The function that performs work on a Foo object.
int TakeFoo (Foo& FooBar) { ... }
// An overload just to accept temporary Foo objects.
int TakeFoo (Foo&& FooBar)
{
// Delegate
return TakeFoo(FooBar);
}
另一种方法就是这样做:
int TakeFoo (const Foo& FooBar)
{
Foo& MyFooBar = const_cast<Foo&>(FooBar);
// Do work on MyFooBar
}
但是这种方法的问题是,您可能会在实际声明为 const 的对象上将 const 转换为 const,这会使我陷入未定义的行为领域。
编辑:
使用 TakeFoo 的代码示例:
Foo GimmeFoo() { ... }
cout << TakeFoo(GimmeFoo()) << endl;
Foo ConstructedFoo(...);
cout << TakeFoo(ConstructedFoo) << endl;
// Continue to use ConstructedFoo