저는 C++ 함수 템플릿을 배우려고합니다. 배열을 함수 템플릿에 대한 포인터로 전달하고 있습니다. 그, 배열의 크기를 찾으려고 노력하고 있습니다. 다음은 내가 사용하는 함수 템플릿입니다.sizeof 연산자가 함수 템플릿 내에서 작동하지 않는 이유는 무엇입니까?
template<typename T>
T* average(T *arr)
{
T *ansPtr,ans,sum = 0.0;
size_t sz = sizeof(arr)/sizeof(arr[0]);
cout<<"\nSz is "<<sz<<endl;
for(int i = 0;i < sz; i++)
{
sum = sum + arr[i];
}
ans = (sum/sz);
ansPtr = &ans;
return ansPtr;
}
cout
문은 내가 5
정수 배열에 포인터를 전달하고 경우에도 arr
1
으로의 크기를 표시합니다. 이제는 이것이 제가 앞에서 언급 한 질문들의 가능한 중복일지도 모른다고 알고 있습니다 만 이것에 대해 더 나은 설명이 필요합니다. 내가 가지고 올 수
만 가지 템플릿이 런타임에 호출 및 sizeof
은 컴파일 시간 연산자입니다 때문에이 편곡의 정확한 유형을 알고하지 않기 때문에, 컴파일러는 단지 라인
int sz = sizeof(arr)/sizeof(arr[0]);
을 무시한다는 것입니다 실제로 함수를 호출 할 때까지 맞습니까? 아니면 여기에 놓친 것이 있습니까? 또한 함수 템플리트에 배열에 대한 포인터를 보내는 것이 신뢰할 수 있습니까?
이것은 함수 템플릿과 아무 관련이 없습니다. 포인터를 취하는 일반 함수로 같은 것을 얻는다. 포인터가 배열이 아닙니다. – Mat
가능한 [sizeof (배열을 가리키는 포인터)를 찾는 방법] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to-an- 배열) –
"템플릿은 런타임에 호출됩니다."잠깐, ** 무엇?! ** – ereOn