virtual void myFunc(int& a, int& b) {}
我收到有關未使用變量的警告,但我不想在基類中對它們做任何事情。 我想讓派生類實現它們,如果他們想要,並且不做任何事情,如果他們沒有實現它們。除了在編譯器上放置標誌之外,我能做些什麼來阻止警告?C++虛函數的參數在未使用時會得到警告
virtual void myFunc(int& a, int& b) {}
我收到有關未使用變量的警告,但我不想在基類中對它們做任何事情。 我想讓派生類實現它們,如果他們想要,並且不做任何事情,如果他們沒有實現它們。除了在編譯器上放置標誌之外,我能做些什麼來阻止警告?C++虛函數的參數在未使用時會得到警告
嘗試定義的功能,無需參數名稱作爲
virtual void myFunc(int& ,int& )
{
}
還要考慮的可能性TTO使基類的抽象
virtual void myFunc(int& a,int& b) = 0;
如果它只是簡單地說明接口。
既然你不想使用它們,你可以發出參數名稱。
然而,不是刪除他們完全是有時更多有用的評論它們像這樣:
virtual void myFunc(int& /* a */ , int& /* b */)
{
}
這樣你仍然可以看到該參數的目的是通過觀察註釋掉名。如果將實現放在標題中,這將特別有用,因爲它將是唯一提及參數名稱的地方。
您有幾種方式來無聲此警告
從聲明/定義中刪除他們:
virtual void myFunc(int& /* a */ , int& /* b */) {}
這種解決方案可能會引起一些警告一些工具如Doxygen的...
使用技巧來判斷參數是未使用的:
template <typename T> void unusedArg(const T&) {} // Helper function.
// In the class
virtual void myFunc(int& a, int& b) { unusedArg(a); unusedArg(b); }
或C++ 11:
template <typename ... Ts> void unusedArgs(const Ts...&) {} // Helper function.
// In the class
virtual void myFunc(int& a, int& b) { unusedArgs(a, b); } // C++11
在C++ 17,則還可以使用屬性[[maybe_unused]]
:
// In the class
virtual void myFunc([[maybe_unused]] int& a, [maybe_unused]] int& b) {}
如果您正在使用C++ 11,我想你會用完美轉發(&&)。 – Phil1970
在一些編譯器,則可以簡單地寫變量名稱爲「無操作」語句。
virtual void myFunc(int& a, int& b)
{
a; // unused variable
b;
}
但是,爲了支持其他編譯器和使意圖明確,你可以使用宏或函數unused_argument
講清楚。
如果這不適用於您的編譯器,我認爲做sizeof(a);
會起作用。
根據你的類,它可能會使它聲明爲抽象函數:'虛擬無效myFunc(int&a,int&b)= 0;'。 –
我不想去執行時,從它派生的任何類。 – gda2004
正如我所說的 - 這取決於你的類(也許我應該說:「這取決於你的通用設計」) –