加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读