2012-11-24 5 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 잘, 예를 들어'std :: size_t' 대신'unsigned long long'을 반환하도록 만들 수 있습니다. – juanchopanza

1

을 . 그래서이 시도 :

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

std::size_t는 헤더 <cstddef>에서 발견된다. 부호없는 정수 유형입니다.

관련 문제