我希望有人可以解释以下行为.
假设我正在尝试实现一个确定任何数组长度的函数,但希望避免使用宏.例如
#define array_length(x) ( sizeof(x) / sizeof(x[0]) )
Run Code Online (Sandbox Code Playgroud)
鉴于该函数必须适用于任何参数类型,我必须使用模板.
我的第一次尝试看起来像这样.
template <typename T>
inline size_t
array_length(const T argument) {
return sizeof(argument) / sizeof(argument[0]);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为参数被视为指针.一旦T变为T,一切都工作得很好.
我想知道是否有人可以说一下语言实现水平发生了什么.例如,当引用用作函数参数时,将哪些额外信息传递给函数?