"(void)!ptr"做什么?

8 c++

我在阅读pugixml源代码时看到它,我真的不知道为什么会这样.

void foo(void* ptr) {
    (void)!ptr;  // What does this line do?
}
Run Code Online (Sandbox Code Playgroud)

nne*_*neo 9

(void)ptr; 是一种抑制"未使用参数"警告的常用方法,当函数签名需要包含的参数多于函数使用的参数时,这可能是必要的(例如,在回调中,如果未使用'user data'参数).

!对我来说是新的,虽然在这种情况下它是多余的,因为返回值只是被扔掉了.

  • 对我来说,这似乎是不必要的偏执狂.转换为void将使得参数"似乎"被使用,并且我所知道的每个编译器都理解这一点并避免发出未使用的参数警告. (4认同)