在c ++中使用模板时,我有时需要将字符串作为值模板参数传递.
我发现很难理解为什么允许某些参数而其他参数不允许.
例如,如果类的静态成员,则const char*可以作为模板参数给出,如果在外部定义则不能.
我做了一个小程序来测试所有这些,评论不编译的行.我也基于编译器输出做了一些假设,但它们可能是错误的.
模板参数值的规则是什么.我看到该对象需要外部链接但是bool被授权,尽管它显然没有任何联系.
#include <iostream>
using namespace std;
struct tag {
static char array[];
static const char carray[];
static char *ptr;
static const char *cptr;
static const char *const cptrc;
static string str;
static const string cstr;
};
char tag::array[] = "array";
const char tag::carray[] = "carray";
char *tag::ptr = (char*)"ptr"; // cast because deprecated conversion
const char *tag::cptr = "cptr";
const char *const tag::cptrc = "cptrc";
string tag::str = "str";
const string tag::cstr = "cstr"; …Run Code Online (Sandbox Code Playgroud)