假设我有一个sum带有可变参数包的函数。
该函数需要使用运算符 ADD UP 参数包中的所有参数+。
注意:它不能以任何方式使用运算符+=,并且只能使用运算符+(因为程序不能假设所有参数都已operator+=重载)。
然后,函数sum需要返回整个“总和”或累加。
这是它的基本结构:
template <class... Args>
auto sum(Args... args)
{
// ... The code
}
Run Code Online (Sandbox Code Playgroud)
注意:所有参数可能不是同一类型,并且您可以假设operator+参数包的所有类型都存在相应的重载。
了解我正在使用 C++ 20 可能会有所帮助。
考虑以下代码:
#include <iostream>
int main()
{
int i = 0;
std::cout << ++i << ' ' << --i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
Nicolai Josuttis 在他的《C++17 完整指南》一书中写道,在C++17之前,这个特定的示例可能会产生不可预测的结果。和1 0都0 1可能被产生,但更重要的0 0是还有可能的输出。我不明白为什么第三个序列应该被考虑为可能的。应该在评估第二个值之前评估++ior ,根据定义,第二个值不能产生两个零,不是吗?--i