我知道,intgral型非类型模板参数必须是常量表达式,以便:
非类型模板参数
template <int E>
class cat
{
public:
int array[E];
};
int main()
{
cat<4> ob; // ??
}
从我只读const
变量得到与const
初始化表达式是const
表达式。在这个例子中,我们有int E = 4;
,所以E
将不是是const
表达式。
那么为什么不cat<4> ob;
抛出一个错误?我在这里错过了什么吗?
如果在编译时不知道E
,将如何创建int array[E];
?
'4'是编译时间常数。 – hmjd
@hmjd我在谈论E.当我做猫<4> ob;它就像告诉编译器创建变量E并将其设置为4一样,因为E是非const int。所以在编译时E不会知道E的值。所以数组[E]会抛出一个错误。 – AlexDan