gpt4 book ai didi

c++ - 如何避免 "(void)a"cast 导致副作用?

转载 作者:IT老高 更新时间:2023-10-28 23:14:46 25 4
gpt4 key购买 nike

我有这段代码,GCC 会打印“什么!?”。我怎样才能避免这种情况,所以 void Actor 只是有 C 意思“忽略孤独的 'a;'”?

#include <iostream>

struct A {
template<typename T>
operator T() {
std::cout << "what!?";
}
};

int main() {
A a;
(void)a;
}

最佳答案

如您所见,这是 bug in gcc .标准如下:

12.3.2 Conversion functions [class.conv.fct]

(1) A conversion function is never used to convert a (possibly cv-qualified) object to [...] (possibly cv-qualified) void.
116) A conversion to void does not invoke any conversion function (5.2.9).

5.2.9 Static cast [expr.static.cast]

(6) Any expression can be explicitly converted to type cv void, in which case it becomes a discarded-value expression (Clause 5).

作为一种解决方法,您可以编写:

a, void();

重载 operator,(void) 是不可能的,因此从符合要求的实现中调用用户定义行为的可能性为零。

关于c++ - 如何避免 "(void)a"cast 导致副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11794318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com