考虑这个简单的函数
template<typename T>
void func(const T& x) {std::cout<< typeid(T).name();}
现在如果我调用函数 func("ddd")
, T 会推导出什么? .如果func
的参数中没有const
,T
就是char [4]
,有什么好混淆的me 是 const
的加法,T 推导出什么?
是吗:const char [4]
。如果我将参数更改为 T const &x
(即更改 const
的顺序),推导会产生 T
到 char const [4]
?
谁能用字符串文字解释参数推导?
最佳答案
字符串文字是常量字符数组。
对 4 个字符的字符串文字的引用是 char const (&)[4]
类型。
const char [4]
和 char const [4]
是相同的类型!
char const (&)[N]
, const char [N]
和 char const [N]
都推导为 字符常量 [N]
#include <iostream>
template<typename T>
void func1(T& x) {std::cout<< typeid(T).name()<<std::endl;}
template<typename T>
void func2(const T& x) {std::cout<< typeid(T).name()<<std::endl;}
template<typename T>
void func3(T const &x) {std::cout<< typeid(T).name()<<std::endl;}
int main()
{
char c[4]= {'a','b','c','d'};
const char c1[4]= {'a','b','c','d'};
char const c2[4]= {'a','b','c','d'};
func1("abcd"); //prints char const [4]
func1(c); //prints char [4]
func1(c1); //prints char const [4]
func1(c2); //prints char const [4]
func2("abcd"); //prints char const [4]
func2(c); //prints char [4]
func2(c1); //prints char const [4]
func2(c2); //prints char const [4]
func3("abcd"); //prints char const [4]
func3(c); //prints char [4]
func3(c1); //prints char const [4]
func3(c2); //prints char const [4]
return 0;
}
关于c++ - 字符串文字的模板参数推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32689111/