c – 字符串文字的模板参数推导

考虑这个简单的功能

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','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;
}
点赞