【发布时间】:2021-02-18 10:07:05
【问题描述】:
看起来这段代码对于 gcc 来说是可以接受的,即使标准规定表达式的值在 void 强制转换的情况下被丢弃。
#include <iostream>
int f(int i) {
int a = i*2;
(void)a;
a++; // looks OK even after void cast
return a; // looks OK even after void cast
}
int main() {
std::cout << "f(5): " << f(5) << "\n"; // displays 11
return f(5);
}
那么通常可以使用更改已被 void 强制转换的变量的值,那么在这种情况下“丢弃”是什么意思?或者依赖它是一种不好的做法?
【问题讨论】:
-
我认为您可以检查此链接以解决您的问题; stackoverflow.com/questions/34288844/….
-
你肯定误解了那部分的标准。
-
a的值是检索然后丢弃的表达式的结果。a的原始内容不受影响。 -
我认为您将变量的值与变量本身混淆了。演员阵容对演员阵容的论点没有任何影响。
-
并非如此,(1) 它可能会在对象上调用
operator int,并且 (2) 您可以将事物转换为char&并分配给它(通常会导致未定义的行为)。