查看类型推导结果

  • typeid的方式
  • 编译器查看
  • 编译结果
  • 推荐编译结果查看

怎么查看

错误代码导致编译错误,然后编译器输出结果查看。

template<typename T>
void show(const T& a) {
    
    
    // error code
    a.nice();
}
int main() {
    
    
    show(1);
}

编译输出

已启动生成…
1>------ 已启动生成: 项目: test, 配置: Debug Win32 ------
1>test.cpp
1>D:\codes\vs\test\test\test.cpp(4,7): error C2228: “.nice”的左边必须有类/结构/联合
1>D:\codes\vs\test\test\test.cpp(4,7): message : 类型是“const T”
1>        with
1>        [
1>            T=int
1>        ]
1>D:\codes\vs\test\test\test.cpp(7): message : 查看对正在编译的函数 模板 实例化“void show<int>(const T &)”的引用
1>        with
1>        [
1>            T=int
1>        ]
1>type_cast.cpp
1>正在生成代码...
1>已完成生成项目“test.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0==========

编译结果分析

  • T=int可以分析推导出来的Tint.
  • 得到的函数是void show<int>(const T&)

案例二

template<typename T>
void show(const T& a) {
    
    
    // error code
    a.nice();
}
int main() {
    
    
    show("str");
}

编译输出

已启动生成…
1>------ 已启动生成: 项目: test, 配置: Debug Win32 ------
1>test.cpp
1>D:\codes\vs\test\test\test.cpp(4,7): error C2228: “.nice”的左边必须有类/结构/联合
1>D:\codes\vs\test\test\test.cpp(4,7): message : 类型是“const char [4]1>D:\codes\vs\test\test\test.cpp(7): message : 查看对正在编译的函数 模板 实例化“void show<char[4]>(const T (&))”的引用
1>        with
1>        [
1>            T=char [4]
1>        ]
1>已完成生成项目“test.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0==========

结果分析

  • T=char[4],即长度为4的字符串数组。
  • 得到的函数类型是void show<char[4]>(const T (&))

Guess you like

Origin blog.csdn.net/rubikchen/article/details/121581296