【发布时间】:2016-06-05 23:26:11
【问题描述】:
我有以下功能(仅用于重现问题):
template <typename KeyT>
void func(const KeyT cptr) {
std::cout << typeid(KeyT).name() << std::endl;
}
我想用字符串文字来调用它,如下所示:
func<char*>("literal");
但是,我最终得到以下警告:
警告:ISO C++11 不允许从字符串文字转换为 'char *' [-Wc++11-compat-deprecated-writable-strings]我特别需要使用 char* 作为我的密钥类型,并且我期望 TAD 将 param type 整体视为 const char*,因为我没有将其作为参考。
clang 和 g++ 编译器都带有警告。
param type 这里是如何推导出来的?
提前致谢。
【问题讨论】:
-
cptr最终成为 const 指向字符的指针 (char *const),而不是指向 const char 的指针。 -
@melpomene 怎么会这样?
-
你的声明说
cptr必须是const,你用char *实例化KeyT。所以cptr是一个常量 KeyT(其中 KeyT = 指向字符的指针)。