为什么我可以将此向量转换为void(甚至不是指针)?
int main()
{
std::vector<int> a;
(void)a;
}
为什么允许这样做?
答案 0 :(得分:15)
转换为void只会丢弃表达式的结果。有时,您会看到人们使用它来避免“未使用的变量”或“忽略的返回值”警告。
在C ++中,您应该写static_cast<void>(expr);
而不是(void)expr;
这与丢弃值具有相同的效果,同时清楚地表明正在执行何种转换。
标准说:
任何表达式都可以显式转换为cv void类型,其中 如果它成为废弃值表达式(第5条)。 [ 注意: 但是,如果值在临时对象(12.2)中,则为析构函数 对于该对象,直到通常的时间和值的值才执行 为了执行析构函数,保留对象。 - 后注]
ISO / IEC 14882:2011 5.2.9 par。 6