我剛纔在一些示例代碼中遇到了這個問題,我以前從未見過它。對於返回類型但不使用返回值的內聯函數,作者在調用前加上(void)
。這實際上是否做任何事情?爲什麼void以這種方式使用內聯函數?
例子:
inline some_object& SomeClass::doSomething();
SomeClass o;
(void)o.doSomething();
我剛纔在一些示例代碼中遇到了這個問題,我以前從未見過它。對於返回類型但不使用返回值的內聯函數,作者在調用前加上(void)
。這實際上是否做任何事情?爲什麼void以這種方式使用內聯函數?
例子:
inline some_object& SomeClass::doSomething();
SomeClass o;
(void)o.doSomething();
這是(IMO)一種可怕的做法,它被一些工具鼓勵,它們給出了關於調用函數和忽略返回函數的警告。
解決此問題的正確方法是爲工具提供可合理忽略返回值的函數列表。如果該工具不支持該功能,則可能無用,應該扔掉。在編譯器的情況下,您可能無法自行丟棄該工具,並且可能不得不在全局禁用該警告時解決。
1.最常見的類似lint
,但一些編譯器可以做同樣的。
要壓制源代碼分析器的警告,調用者忽略返回結果。 – WhozCraig
禁止關於忽略函數的返回值的編譯器警告。 –
通過轉換爲'void',它可能不會在某些編譯器設置爲嚴格的警告級別時產生未使用的值警告。所以也許它是爲了得到乾淨的編譯。同樣,如果你有一個帶有未使用參數的函數(爲了匹配一個簽名,例如QT信號),你可以在函數內部將參數強制轉換爲void,並且仍然有一個沒有任何警告的'clean'編譯。 – infixed