允许转换为void(不是指针),为什么?

时间:2015-09-28 17:05:51

标签: c++ language-lawyer

为什么我可以将此向量转换为void(甚至不是指针)?

int main()
{
   std::vector<int> a;
   (void)a;
}

为什么允许这样做?

1 个答案:

答案 0 :(得分:15)

转换为void只会丢弃表达式的结果。有时,您会看到人们使用它来避免“未使用的变量”或“忽略的返回值”警告。

在C ++中,您应该写static_cast<void>(expr);而不是(void)expr;

这与丢弃值具有相同的效果,同时清楚地表明正在执行何种转换。

标准说:

  

任何表达式都可以显式转换为cv void类型,其中   如果它成为废弃值表达式(第5条)。 [ 注意:   但是,如果值在临时对象(12.2)中,则为析构函数   对于该对象,直到通常的时间和值的值才执行   为了执行析构函数,保留对象。    - 后注]

ISO / IEC 14882:2011 5.2.9 par。 6

相关问题