2012-11-24 34 views
3

我試着寫我自己的函數這一點,但我得到錯誤的結果如何在C++中獲取數組的長度?

#include <iostream> 

using namespace std; 

template<typename T> 
int array_length(T v[]) { 
    return (sizeof v)/sizeof(T); 
} 

int main() { 
    int v[] = {1, 2, 3, 4}; 
    cout << array_length(v) << endl; 
    return 0; 
} 
+1

https://gist.github.com/3959946查看上一個函數。 –

+0

http://stackoverflow.com/questions/3368883/how-does-this-size-of-array-template-function-work – relaxxx

+1

@ R.MartinhoFernandes:即使編譯器知道大小,該函數將在運行時給出大小在編譯時本身。因此,我不會說這是一個很好的實施。 – Nawaz

回答

6

事情是這樣的:

#include <cstddef> // for size_t 

template< typename T, std::size_t N > 
std::size_t length(const T (&)[N]) 
{ 
    return N; 
} 

使用

int data[100]; 
std::cout << length(data) << "\n"; 
+0

謝謝。但沒有包含(僅iostream)可能嗎? –

+0

@HardRain好吧,例如,你可以讓它返回一個'unsigned long long'而不是'std :: size_t'。 – juanchopanza

1

長度由數組提供。所以,試試這個:

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

std::size_t在頭<cstddef>被發現。它是一個無符號整數類型。