我有一個類Foo
。 Foo
有幾個非const方法。我可以在一個臨時的Foo
對象上調用非const方法。我只對這些方法實際返回的內容感興趣,而不是他們對對象本身的做法。如何正確覆蓋「no non-const reference to temporary object」
第一個問題:這是否必須表明階段Foo
的設計不合適?
第二個問題:如果我想按原樣繼續使用Foo
,但我仍然希望能夠通過引用將調用非const方法的函數來傳遞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-cast'ing遠的問題const實際上聲明爲const的對象,這會將我置於undefined-behavior-land。
編輯:使用TakeFoo
代碼示例:
Foo GimmeFoo() { ... }
cout << TakeFoo(GimmeFoo()) << endl;
Foo ConstructedFoo(...);
cout << TakeFoo(ConstructedFoo) << endl;
// Continue to use ConstructedFoo
你還可以添加一些代碼來顯示客戶端代碼將如何調用和使用'TakeFoo'? – greatwolf