在这个答案中,我编写了 C++17 代码:
cout << accumulate(cbegin(numbers), cend(numbers), decay_t<decltype(numbers[0])>{});
这收到了一些关于 C++ 类型关联性质的负面评论,我很遗憾地说我同意:(
decay_t<decltype(numbers[0])>{}
是一种非常复杂的方法来获得:
元素的零初始化类型
numbers
是否可以保持与numbers
' 元素类型的关联,但不能输入 30 个字符来获取它?
编辑:
我有很多答案都涉及到包装器accumulate
或从numbers[0]
. 问题是它们需要读者导航到次要位置以阅读与初始化代码一样复杂的解决方案decay_t<decltype(numbers[0])>{}
。
我们必须做更多的唯一原因是:decltype(numbers[0])
因为数组下标运算符返回一个引用:
错误:将“int”类型的右值表达式无效转换为“int&”类型
有趣的是,关于decltype
' 的论点:
如果对象的名称带括号,则将其视为普通的左值表达式
但是,decltype((numbers[0]))
仍然只是对 的一个元素的引用numbers
。所以最后这些答案可能与我们可以简化这个初始化一样接近:(