【发布时间】:2013-10-24 10:22:36
【问题描述】:
谁能解释一下为什么下面的标记行编译得很好:
template<typename T, int N>
constexpr
int get_size(T (&)[N])
{
return N;
}
int main()
{
int xs[10];
constexpr int y = get_size(xs); // HERE.
static_assert(10 == y, "wrong size");
}
凭直觉,get_size(xs) 不是一个常量表达式,因为 xs 本身不是,所以我不明白它为什么起作用。
【问题讨论】:
-
xs的大小是一个编译时间常数,这是函数模板为你得到的。 -
@juanchopanza 我想我很困惑为什么地址未知的自动变量可以通过引用常量表达式中使用的函数来传递。
标签: c++ arrays c++11 constexpr