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

标签 c++

考虑这个简单的函数

template<typename T>
void func(const T& x) {std::cout<< typeid(T).name();}

现在如果我调用函数 func("ddd") , T 会推导出什么? .如果func的参数中没有constT就是char [4],有什么好混淆的me 是 const 的加法,T 推导出什么?

是吗:const char [4]。如果我将参数更改为 T const &x(即更改 const 的顺序),推导会产生 Tchar 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/

相关文章:

c++ - 类初始化列表中的 vector

c++ - 如何将5个值的数组1D打印为列?

Qt Creator 支持 C++11 IDE?

c++ - 如何多次顺序调用3个线程?

c++ - 从 QGLPixelBuffer 获取深度缓冲区

python - 如何将c、c++和python代码编译为 “Released/Final”版本?

c++ - VS链接错误描述中的 "@@YAHXZ"是什么意思?

c++ - 如何找到两个 vector 之间的角度?

c++从内存加载位图 - 内存泄漏

c++ - 如何在C++中输入128位无符号整数