C++ 如何避免;(作废)a“;有副作用吗?
我有这个代码,GCC打印“什么!?”。我怎样才能避免这种情况,使void cast的意思是“忽略孤独的‘a;’”C++ 如何避免;(作废)a“;有副作用吗?,c++,gcc,void,c++11,C++,Gcc,Void,C++11,我有这个代码,GCC打印“什么!?”。我怎样才能避免这种情况,使void cast的意思是“忽略孤独的‘a;’” #包括 结构A{ 模板 运算符T(){ std::cout添加一个 operator void() {} 注意。正如您所观察到的,这是一个标准。标准如下: 12.3.2转换函数[类别conv.fct] (1) A 转换函数从不用于将(可能是cv限定的)对象转换为[…](可能是cv限定的)void。 116)转换为void不会调用任何转换函数(5.2.9) 5.2.9静态浇铸[ex
#包括
结构A{
模板
运算符T(){
std::cout添加一个
operator void() {}
注意。正如您所观察到的,这是一个标准。标准如下:
12.3.2转换函数[类别conv.fct]
(1) A
转换函数从不用于将(可能是cv限定的)对象转换为[…](可能是cv限定的)void。
116)转换为void不会调用任何转换函数(5.2.9)
5.2.9静态浇铸[expr.Static.cast]
(6) 任何表达式都可以显式转换为cv void类型,在这种情况下,它将成为一个丢弃的值
表达方式(第5条)
作为解决方法,您可以编写:
a, void();
不可能重载运算符(void)
,因此从一致性实现调用用户定义行为的可能性为零。为什么需要它?不允许使用void
专门化模板函数吗?(主体为空)注意,在C中,如果a
对象是volatile限定的,那么语句(void)a;
“不可能重载操作符,(void)
[…]”也会产生副作用如果编译器有问题怎么办?:P…或者换一种说法,对于一致性实现来说,不可能需要解决方法。谢谢!我无法想象我以前没有遇到过这个问题。
a, void();