ejo*_*rns 8 c++ templates const
为什么这样做?
char __nontype[] = "foo";
typedef TemplateClass<T, __nontype> MyClass;
Run Code Online (Sandbox Code Playgroud)
但是这个(带有常数变量)不是吗?
const char __nontype[] = "foo";
typedef TemplateClass<T, __nontype> MyClass;
Run Code Online (Sandbox Code Playgroud)
编译器错误:
错误:'__ nontype'不能出现在常量表达式中
错误:模板参数2无效
小智 6
不同之处在于const
影响联系.它可以添加extern
.那就是说,据我所知:
14.3.2模板非类型参数[temp.arg.nontype]
非类型非模板模板参数的模板参数应为以下之一:
- 一个整数常量表达式(包括可用作5.19中描述的整数常量表达式的文字类型的常量表达式); 要么
- 非类型模板参数的名称; 要么
- 一个常量表达式(5.19),用于指定具有静态存储持续时间和外部或内部链接的对象的地址,或具有外部或内部链接的函数,包括函数模板和函数模板-id,但不包括非静态类成员,表示(忽略)括号)as&id-expression,除非如果名称引用函数或数组,可以省略&,如果相应的template-parameter是引用,则省略; 要么
- 一个常量表达式,其值为空指针值(4.10); 要么
- 一个常量表达式,其值为null成员指针值(4.11); 要么
- 指向成员的指针,如5.3.1中所述.
它也应该没有extern
.允许该对象具有内部链接,但您的编译器尚不支持该内容.这是C++ 11中的一个变化,以前的C++标准不允许它.
归档时间: |
|
查看次数: |
1971 次 |
最近记录: |