大家好。最近我对 std::end 的工作原理产生了兴趣,当我去查看实现时,我在那里看到了类似这样的代码(我现在看不到它):
template<typename T, size_t sz> constexpr end( T (&arr)[sz])
{
return arr+sz;
}
据我了解sz
,它负责数组的大小,但由于某种原因,它绝对不是一个普通的变量,而是以某种方式在模板中。模板中定义的这个神奇的“变量”是什么?它的用途是什么?
大家好。最近我对 std::end 的工作原理产生了兴趣,当我去查看实现时,我在那里看到了类似这样的代码(我现在看不到它):
template<typename T, size_t sz> constexpr end( T (&arr)[sz])
{
return arr+sz;
}
据我了解sz
,它负责数组的大小,但由于某种原因,它绝对不是一个普通的变量,而是以某种方式在模板中。模板中定义的这个神奇的“变量”是什么?它的用途是什么?
这不是变量,而是模板参数。当编译器在代码中遇到时
std::end(some_array)
,它会寻找一个合适的签名。如果
some_array
它有一个类型——一个带有元素SomeType[n]
的类型数组,那么编译器将通过将类型与参数相关联来实例化模板,并且元素的数量将与参数相关联。SomeType
n
template< class T, std::size_t N > constexpr T* end( T (&array)[N] ) noexcept;
SomeType
T
n
sz
此模式仅适用于固定大小的数组:
int somevar[] = {1,2,3,4,5,6,7,8,9, 10}
,массив фиксированного размера
: