如何解决使用以前无效的变量是否有效?
看起来这个代码在 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 cast的变量的值,然后在这种情况下“丢弃”是什么意思?还是依赖它是一种不好的做法?
解决方法
表达式的结果被丢弃,在您的情况下,这意味着 (void)a
的结果被丢弃。这通常用于避免未使用的变量(或未使用的返回值)警告。在 a
之后使用 (void)a
完全没问题,但首先使用 (void)a
没有意义。
编辑:解决评论中提出的一些问题。 standard 的确切措辞是:
任何表达式都可以显式转换为 cv void 类型。这 表达式值被丢弃。
在这种情况下,a
是表达式,它被强制转换为 void
,从而丢弃表达式的结果,因此 “(void)a 的结果” 是从技术上讲不正确: a
的结果被丢弃,因为它被强制转换为 void
- 但也可以认为强制转换的结果本身被丢弃(本质上,强制转换什么都不做) .
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。