簡體   English   中英

將數組傳遞給C ++中的函數

[英]Passing array to function in C++

為什么以下內容無法編譯

#include <iostream>

template <typename T, size_t N>
const size_t len(T[N]){
    return N;
}

int main(int argc, char* argv[]) {
    using namespace std;

    int arr[] = {1, 2, 3};
    cout << len(arr);
}

但是這樣做:

#include <iostream>

const size_t foo(int[3]) {
    return 42;
}

int main(int argc, char* argv[]) {
    using namespace std;

    int arr[1] = {123};
    cout << foo(arr);
}

但參數顯然不正確,並且奇怪的是僅省略了參數標識符

我正在將GCC 4.9.2與-std = c ++ 1y一起使用

編輯:
第一個示例的錯誤消息:

main.cpp:12:24: error: no matching function for call to 'len(int [3])'
         cout << len(arr);
                        ^
main.cpp:12:24: note: candidate is:
main.cpp:4:18: note: template<class T, unsigned int N> const size_t len(T*)
     const size_t len(T[N]){
                  ^
main.cpp:4:18: note:   template argument deduction/substitution failed:
main.cpp:12:24: note:   couldn't deduce template parameter 'N'
         cout << len(arr);
                        ^

出於奇怪的歷史原因,看起來像數組的函數參數實際上是指針。 如果指定數組大小,則將忽略它。 所以模板相當於

template <typename T, size_t N>
const size_t len(T*){
    return N;
}

參數可以是指針,也可以是任何可轉換為參數的值,包括任何大小的數組,因此無法從參數中推導出N 您可以通過引用引用來解決此問題:

template <typename T, size_t N>
size_t len(T(&)[N]){
    return N;
}

現在,參數只能是已知大小的數組,並且將從該大小中推導出N

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM