누군가 다음과 같은 행동을 설명 할 수 있기를 희망합니다.sizeof 및 참조 전달
배열의 길이를 결정하지만 매크로를 사용하지 않으려는 함수를 구현하려고한다고 가정합니다. 예를 들어
#define array_length(x) (sizeof(x)/sizeof(x[0]))
매개 변수 유형으로 작동해야한다는 점을 감안할 때 템플릿을 사용해야합니다.
첫 시도는 다음과 같이 보입니다.
template <typename T>
inline size_t
array_length(const T argument) {
return sizeof(argument)/sizeof(argument[0]);
}
인수가 포인터로 처리되기 때문에 작동하지 않습니다. T가 T &으로 변경되면 모든 것이 멋지게 작동합니다.
누구든지 언어 구현 수준에서 어떤 일이 일어나고 있는지 말할 수 있는지 궁금합니다. 예를 들어 참조가 함수 인수로 사용될 때 함수에 전달되는 추가 정보는 무엇입니까?
+1은'std :: array'에 대해서 +1이지만, 매크로를 요구하는 것에 대해서는 : OP 자신의 시도는 다른 대답에 의해 보여지는 템플릿보다 열등합니다. – UncleBens