c – 字符串文字的模板参数推导
发布时间:2020-12-16 07:13:42 所属栏目:百科 来源:网络整理
导读:考虑这个简单的功能 templatetypename Tvoid func(const T x) {std::cout typeid(T).name();} 现在,如果我调用函数func(“ddd”),T推导出什么? .如果func的参数中没有const,那么T就是char [4],让我困惑的是添加const,T推导出什么? 它是:const char [4].如
考虑这个简单的功能
template<typename T> void func(const T& x) {std::cout<< typeid(T).name();} 现在,如果我调用函数func(“ddd”),T推导出什么? .如果func的参数中没有const,那么T就是char [4],让我困惑的是添加const,T推导出什么? 它是:const char [4].如果我将参数更改为T const& x(即const的变化顺序),则推导会产生T到char const [4]吗? 任何人都可以用字符串文字来解释参数推论吗? 解决方法
字符串文字是const字符的数组.
对4个字符串的字符串文字的引用是char const(&)[4]类型. const char [4]和char const [4]是相同的类型! char const(&)[N],const char [N]和char const [N]都推导为char const [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','d'}; char const c2[4]= {'a','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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |