【问题标题】:statement in boost lib, (void)p; what does it mean?boost lib中的语句,(void)p;这是什么意思?
【发布时间】:2011-07-08 09:44:34
【问题描述】:

我在 Boost 库中遇到了 offset_ptr 的以下代码。在 boost/interprocess/offset_ptr.hpp 下

typedef PointedType *                     pointer;
...
    //!Constructor from other pointer.
    //!Never throws.
    template <class T>
    offset_ptr(T *ptr) 
    {  pointer p (ptr);  (void)p; this->set_offset(p); }

我想知道语句 (void)p; 是做什么的有吗?

【问题讨论】:

  • 将代码缩进 4 个空格,或者按下 {} 按钮,以便 SO 以固定宽度显示并突出显示。拥有 284 声望的人现在应该知道了。
  • 也许这会触发类型转换运算符内部的一些副作用?
  • 通常此类代码用于使未使用的参数/变量警告静音,但这里似乎并非如此。奇怪
  • @Chris:p 不是返回值,所以这不是那个问题的重复。

标签: c++ templates boost


【解决方案1】:

找出答案的一种方法是在该代码行上放置一个断点,然后逐步了解它的作用。您甚至可以重新格式化代码以允许您在该特定语句上设置断点(没有禁止编辑这些文件的法律 - 只是不要更改实际代码)。

但是,我的猜测是 pointer 类型正在使用某种形式的惰性求值,模拟的强制转换运算符调用 set_offset 方法,因此 this-&gt;set_offset(p) 可能需要 p 设置有效的偏移量并且执行(void)p 只会强制它发生。

【讨论】:

  • 我已经尝试设置断点,看看值是否有任何变化,也尝试将其删除。它没有任何区别。当您说“p 设置有效的偏移量并执行 (void)p”时,它的意思是类似于断言吗?
  • @Rahul:不,不像断言,更像是确保满足先决条件。
  • 如果没有填满怎么办?
  • @Rahul:如果未设置该值,this-&gt;set_offset(p) 可能会以某种未定义的方式失败。
猜你喜欢
  • 1970-01-01
  • 2013-12-20
  • 2011-08-31
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2012-01-05
  • 2021-12-25
相关资源
最近更新 更多