我在很多遺留代碼中看到以下模式。我不熟悉它,無法理解爲什麼它在那裏。奇怪的構造模式
在頭文件:
struct ook
{
bool func_called; // Not declared as const!
bool func();
ook();
};
在源文件:
ook::ook():
func_called(func())
{} // ← Nothing there whatsoever.
bool ook::func()
{
// … ← Some stuff without a "return" statement of any kind.
return true; // This does mean that func_called is always true.
}
這是一些有用的東西,或只是奇怪一些可怕的複製和粘貼錯誤?現在
,func_called
只調用構造函數並在代碼永遠不會別的。如果是的話,正如his answer中的Florian Castellane所指出的那樣,這是有道理的。如果它只發生一次,我可以想象這曾經被使用。然而,它在代碼庫中發生了幾十次,所以我想知道它可以使用的其他用途。
只是要格外清楚,這不是我的代碼。我只是想了解(並且沒有歷史,評論或單元測試)邏輯寫的是什麼。也許這是無望的?
不知道它是否有名稱,但它遵循構造函數應爲空的概念。因此,不是讓代碼決定構造函數體中應該包含什麼'func_called',而是將該值賦給一個默認構造變量,然後將它們放入函數中,然後在構造該構件的成員初始化程序中直接調用該函數。我認爲這個功能需要是靜態的。 – NathanOliver
@Nathan不一定是靜態的。 –
@ PeterA.Schneider因此,在完全構造類之前調用非靜態函數是合法的? – NathanOliver