【问题标题】:What does "(void)!ptr" do? [duplicate]“(void)!ptr”做什么? [复制]
【发布时间】:2013-04-08 07:00:18
【问题描述】:

我在阅读pugixml源代码时看到它,我真的不知道它为什么在那里。

void foo(void* ptr) {
    (void)!ptr;  // What does this line do?
}

【问题讨论】:

  • 看起来像是只保留未命名参数的替代品。
  • 通常通过应用无用的操作来阻止编译器和其他工具抱怨未使用的参数。
  • 是的,“ptr”只用在断言语句中。谢谢!

标签: c++


【解决方案1】:

(void)ptr; 是抑制“未使用参数”警告的常用方法,当函数签名需要包含比函数使用的更多参数时(例如,在回调中,如果“用户数据”参数为未使用)。

! 对我来说是新的,尽管在这种情况下它是多余的,因为返回值只是被丢弃了。

【讨论】:

  • ! 可能会强制执行操作,因此它不能简单地放弃使用。
  • 对我来说,这似乎是不必要的偏执。强制转换为 void 是为了使参数“看起来”被使用,我所知道的每个编译器都理解这一点,并避免发出未使用的参数警告。
  • ! 也返回一个bool。它可能会避免“无法将指针转换为非整数”警告或类似的东西。就我个人而言,我很惊讶您可以将类型转换为 void
  • 打开 Watcom C/C++ 1.9 没有得到 this one 正确的。它删除了指针取消引用并且没有崩溃。
  • @MikeDeSimone 根据 C 标准,逗号运算符的左操作数隐式转换为 void
猜你喜欢
  • 2023-04-11
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
相关资源
最近更新 更多