让我们说我们有
template <const char*>
struct A{};
// static storage
const char a[] = "asd";
const char* p = "asd";
Run Code Online (Sandbox Code Playgroud)
这个实例化
A<a>{};
Run Code Online (Sandbox Code Playgroud)
对编译器没问题.这是可以理解的 - 数组a衰减指向第一个元素.但是,如果我们实例A与p这样的
A<p>{};
Run Code Online (Sandbox Code Playgroud)
编译器给出错误:
错误:类型为'char*'的非类型模板参数不是常量表达式
为什么标准不允许指定类型的命名变量const char*或只是字符串文字"asd",即btw左值本身,作为模板参数?
| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |