首页 > 解决方案 > 无效(操作系统 << 参数)。在这种情况下,void 是什么意思?

问题描述

我正在阅读有关折叠表达式的内容,并找到了折叠表达式之前使用的示例:

template <class... Ts>
void print_all(std::ostream& os, Ts const&... args) {
    using expander = int[];
    (void)expander{0,
        (void(os << args), 0)...
    };
}

问题是void(os << args)位。在这种情况下,void 是什么意思?我已经尝试过搜索这个,但它非常通用。

谢谢你的时间。

标签: c++

解决方案


它将结果转换为(os << args)to void。而已。

这种风格用于防止,(逗号)运算符的非常罕见的重载,因为理论上,<<可以为用户定义的args参数重载并返回已重载逗号运算符的内容以进行X, 0表达式。这可能会破坏初始化技巧。这样,代码是安全的,并且逗号始终用作普通的排序运算符。


推荐阅读