[英]Array as non-type template argument
我注意到了
template <size_t n, char[n]> class x
{
};
很高兴我的C ++编译器接受了。 但是,当我天真地尝试类似的东西时
x <4, "hey"> something;
我很高兴
Non type template argument does not refer to any declaration
所以我想知道:我怎样才能真正用这个模板制作课程?
#include <iostream>
template <size_t n, char s[n]>
class X {
public:
X() {
std::cout << s;
std::cout << std::endl;
}
};
char hey[] = "hey";
int main() {
X<4, hey> x;
}
但X<4, "hey"> x;
不编译,因为对于非类型模板参数,某些限制适用:
对于指向对象的指针,模板参数必须指定具有静态存储持续时间和链接(内部或外部)的对象的地址,或者计算为适当的空指针或std :: nullptr_t值的常量表达式。
这引发了另一个问题,我在cppreference.com上找到了以下内容:
数组和函数类型可以在模板声明中编写,但它们会自动替换为指向对象的指针和指向适当函数的指针。
所以s
实际上是一个指针,因此下面将编译:
X<5, hey> something;
潜在的缓冲区溢出问题。
template <size_t n, char[n]> class x
{
};
char foobar[]="hey";
x<4, foobar> y;
用gcc 5.3.1编译
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.