Cod*_*cks 5 c++ arrays reference temporary parameter-passing
我怎样才能传递临时数组?我想做这样的事情:
#include <iostream>
int sum(int arr[]) {
int answer = 0;
for (const auto& i : arr) {
answer += i;
}
return answer;
}
int main() {
std::cout << sum( {4, 2} ) << std::endl; // error
std::cout << sum( int[]{4, 2} ) << std::endl; // error
}
Run Code Online (Sandbox Code Playgroud)
我在函数参数的括号中是否需要正整数文字[]?如果我包含该文字,它会限制我可以传递给那个大小的数组的数组吗?另外,如何通过rvalue引用或const引用传递数组元素?因为上面的示例没有编译,我认为制作函数的参数类型int&&[]或const int&[]不起作用.
Ker*_* SB 11
首先,您不能将数组作为prvalues 传递,因此您的函数需要参考.其次,数组的大小是类型的一部分,因此您的函数可能需要成为模板的一部分.第三,编写数组临时工具在词汇上有点傻,所以你需要一些噪音.
总而言之,以下应该有效
template <std::size_t N>
int sum(const int (&a)[N])
{
int n = 0;
for (int i : a) n += i;
return n;
}
int main()
{
std::cout << sum({1, 2, 3}) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
使用别名模板可以略微推广语法噪音:
int main()
{
using X = int[3];
std::cout << sum(X{1, 2, 3}) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
用法:( sum(X<4>{1, 2, 3, 4})您不能从初始化程序中推导出模板参数.)
| 归档时间: |
|
| 查看次数: |
2574 次 |
| 最近记录: |