首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

查看自动类型推导结果的方法

借助工具查看当IDE不能正确显示出变量的类型的时候还可以选择借助外部的工具来查看,这里推荐一个在线工具,地址是:https://cppinsights.io,这是一个基于Clang的工具,对用户所写的C...需要注意的是,这个工具我发现了一个Bug,就是上面代码中的T9类型别名,正确的类型应该是func函数的类型:int(int, int),这里显示为它的返回值的类型了。...class dumpType;因为上面的模板只有声明,没有具体的定义,因此如果要实例化这个模板就会导致一个编译错误。...C++标准中定义的,是由各编译器扩展的,因此名称不一样,在GCC/Clang中是__PRETTY_FUNCTION__,在微软的MSVC中是__FUNCSIG__,如下代码:#include void dumpType() { // GCC/Clang使用这行 std::cout << __PRETTY_FUNCTION__ << std::endl; // MSVC

13410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【笔记】《C++Primer》—— 第16章:模板与泛型编程

    当我们调用函数模板时,编译器和以前一样可以自动按照我们的实参来推断模板参数的类型,如果想要指定类型则和使用泛型容器时一样在函数名后用尖括号标明所需要的具体类型T即可。...来起类型别名,但是C11让我们可以用using来起模板的类型别名。...在起类型别名时我们会将整个模板类作为一个别名,其中我们可以将一些参数固定住 // 类模板的全参数别名 template using shortTemp...*inp; } 有时候我们无法直接得到所需要的类型,因为我们对会传递进来的参数的类型实际上几乎一无所知,甚至不知道它是不是指针是不是引用是不是右值引用之类,我们需要能够动态地将这些语言特性消去从传入的参数中提取出我们想要的类型...通常情况下我们不能将左值传递给右值引用参数,但是C++设置了两个重要的例外来允许这种传递: 左值如i传递给模板类型的右值引用时,编译器会推断参数类型为左值引用i& 如果我们通过类型别名或模板参数之类的方法间接定义了引用的引用

    1.5K30

    令人沮丧的C++性能调试

    之后,我们将比较三种主要编译器(GCC、Clang 和 MSVC)在这方面的表现,并讨论一些潜在的改进或解决方案。...结果是 GCC 12.2、Clang 14.0 和 MSVC v19.x 最终都会生成一个 call 指令。...另一方面,游戏开发者会嘲笑和避开那些信奉高级抽象和类型安全的 C++ 程序员,因为他们没有意识到调试性能和编译速度可能没有更干净、更安全、更可维护的代码那么重要。...我们可以说函数模板不是为强制转换和位操作创建轻量级抽象的正确模型,类模板和轻量级类型,如 std::vector::iterator,也是如此。...MSVC 还没有在这方面提供任何改进。 我必须说,看到 GCC 和 Clang 维护人员逐步改进调试性能,我感到非常高兴,也非常感谢他们。 无论如何,我不认为硬编码的函数是正确的解决方案。

    1K20

    linux下Clang和gcc的区别

    Clang 比 GCC 编译器的优势: 编译速度更快 编译产出更小 出错提示更友 好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 “ 认为 ” 正确的方式 。...专注,因为 clang 只需要完成词法和语法分析,代码优化和机器代码的生成工作由 llvm 完成。所以和全部由自己包下的 gcc 比起来, clang 可以更专注地做好一件事。...对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的, clang正好充当了这一角色。...这样, editor 工具可以使用和 compiler 一样的 parser 来完成 edit-time 的语法检查 。 而 gcc 就没法很方便地做到这一点 。...链接产物超过200M 编译错误极其难以理解:编译错误经常长达几十K,基本不可读,最要命的是编译错误经常会长到被g++截断,看不到真正出错的位置,基本上只能靠裸看代码来调试 这里先不论我使用Spirit的方式是不是有问题

    5.5K10

    NumPy 1.26 中文文档(五十七)

    Clang 默认为非严格版本,这允许编译器生成不正确设置浮点警告/错误的代码。...查看关于标量类型的文档,全面了解受影响的类。 请注意,虽然插件的使用是完全可选的,但如果没有插件,则上述类的精度将被推断为Any。...Clang 的默认版本是非严格版本,允许编译器生成不正确设置浮点警告/错误的代码。 (gh-19049) 通用函数中错误类型的更改 在某些情况下,通用函数可能会对无效输入引发不同的错误。...Clang 默认使用非严格版本,允许编译器生成未正确设置浮点警告/错误的代码。...请参阅标量类型文档,了解受影响的类的全面概述。 注意,虽然使用插件完全是可选的,但如果不使用插件,上述类的精度将被推断为Any。

    15210

    Auto-Vectorization in LLVM

    许多循环无法矢量化,包括具有复杂控制流、不可分割类型和不可分割调用的循环。...变量“sum”变成一个整数向量,在循环结束时,数组的元素被加在一起以创建正确的结果。我们支持许多不同的归约运算,例如加法、乘法、异或和或。...2.3 性能提升 本节将在一个简单的基准测试gcc循环上显示Clang的执行时间。这个基准测试是来自doritnuzman的GCC自动矢量化页面的循环集合。...下面的图表比较了GCC-4.7、ICC-13和Clang SVN在-O3下有无循环矢量化,针对“corei7-avx”,运行在Sandybridge iMac上。Y轴以毫秒为单位显示时间。越低越好。...和配置相同的Linpack pc。结果是Mflops,越高越好。 ? 可以看到Clang如果无循环矢量化,被GCC和ICC吊打,最好还是开启。

    3.3K30

    clang 源码导读(3): clang driver 参数解析

    比如通过 OptionClass getKind() 方法暴露 Info 的类型 Arg[3] 持有了 Option 和其它命令行参数信息,比如 -arch armv64 的 arm64 会被保存到 Arg...image 如何区分 不支持 或者 不认识 的参数 clang driver 不支持 的参数,都可以通过 Options.td 文件查到 以 -pass-exit-codes 为例,gcc 支持该参数,...查找第一个前缀匹配的 Info 比如,-arch 会变成 arch 根据 Info 初始化 Option 持有参数信息 通过 Option::accept 方法校验参数是否正常 参数正常时直接返回 如果没有找到合适的参数...image 先转发到 Option::acceptInternal 方法进行参数校验 判断解析到的参数是否属于别名 如果别名,会进行特殊处理 Option::acceptInternal 方法会根据 Option...的类型进行处理并生成 Arg 实例。

    2K40

    “C不再是一种编程语言”

    这是说要以 C 语言头文件的方式描述接口的类型和函数,并以某种方式做一些事情: 匹配这些类型的布局; 用链接器做一些事情,将函数的符号解析为指针; 用适当的 ABI 来调用这些函数(比如把参数放在正确的寄存器中...当然,也有一些奇怪的 C 语言编译器,如 clang 和 gcc-。...这里测试的是一些非常令人厌烦的情况,即一些整型参数在两个由 clang 和 gcc 编译的静态库之间按值传递……而且失败了!...甚至是 x64 linux 上的__int128ABI,clang 和 gcc 也未能达成一致。...同样地,你得保留 MyRadTypeV1、MyRadTypeV2 和一些类型定义,以确保人们使用“正确”的类型。 很好,我们可以改变不同版本之间的类型布局!对吗?嗯,大多数时候是这样。

    57920

    “C不再是一种编程语言”

    这是说要以 C 语言头文件的方式描述接口的类型和函数,并以某种方式做一些事情: 匹配这些类型的布局; 用链接器做一些事情,将函数的符号解析为指针; 用适当的 ABI 来调用这些函数(比如把参数放在正确的寄存器中...当然,也有一些奇怪的 C 语言编译器,如 clang 和 gcc-。...这里测试的是一些非常令人厌烦的情况,即一些整型参数在两个由 clang 和 gcc 编译的静态库之间按值传递……而且失败了!...甚至是 x64 linux 上的__int128ABI,clang 和 gcc 也未能达成一致。...同样地,你得保留 MyRadTypeV1、MyRadTypeV2 和一些类型定义,以确保人们使用“正确”的类型。 很好,我们可以改变不同版本之间的类型布局!对吗?嗯,大多数时候是这样。

    66121

    iOS编译简析

    LLVM 历史 早期 iOS 选用的是当时一家独大的 GCC 编译器作为 OC 语言的前端,但是随着时间的推移,Apple 为 OC 增加了很多特性,想要 GCC 给与实现,但是 GCC 却并没有支持,...主要子项目: LLVM 核心库 编译器前端 Clang LLDB libc ++和 libc++ lld Clang Clang 是 LLVM 项目的一个子项目,是 C 系列(C、C++、OC)的编译器前端...相对于 GCC,Clang 具有以下优点 编译速度快:在某些平台上,Clang 的编译速度显著的快过 GCC(Debug 模式下编译 OC 速度比 GGC 快 3 倍) 占用内存小:Clang 生成的...主要流程 Parse: 词法分析组件,生成 AST; Sema(Semantic Analysis):对 AST 进行类型检查,转换为格式正确且类型检查完备的 AST; Clang Importer:...SIL Gen:由 AST 生成 Raw SIL(原生 SIL,代码量很大,不会进行类型检查); SIL 保证转换:SIL 保证转换阶段负责执行额外且影响程序正确性的数据流诊断,转换后的最终结果是规范的

    1.4K20

    C++最佳实践 | 1. 工具

    正确性和脚本 前言 C++最佳实践: 支持Fork的编码标准文档 本文档旨在收集对C++最佳实践所进行的协作性讨论,是《Effective C++》(Meyers) 和《C++ Coding Standards...++则发出警告(所有版本的GCC, Clang >= 3.2) -Wconversion 对可能丢失数据的类型转换发出警告 -Wsign-conversion 对影响到符号的类型转换发出警告(Clang...所有版本,GCC >= 4.3) -Wmisleading-indentation 如果代码中有缩进,但没有对应的代码块,则发出警告(仅在GCC >= 6.0中) -Wduplicated-cond 如果...在可能需要按位操作的地方使用逻辑操作时发出警告(仅在GCC中) -Wnull-dereference 如果检测到空解引用将发出警告(仅在GCC >= 6.0中) -Wuseless-cast 如果执行强制转换到相同的类型...考虑使用将警告视为错误的设置,例如MSVC中的/Wx,以及GCC/Clang中的-Werror。

    3.4K10

    转载:【AI系统】传统编译器发展

    ,很多 Linux 发行版都自带 GCC;Mac:常用的是 LLVM/Clang,被集成在 Xcode 中代码语法正确与否是由编译器来检查,即编译器可以 100% 保证开发者编写的程序代码从语法上是正确...这样比较 Clang 和 GCC 是不公平的,因为 GCC 没有在本地支持 Windows 的计划。代码复杂度:GCC 是一个非常复杂的软件,有超过 1500 万行代码。...语言独立的类型系统——在这个标题下对比 Clang 与 GCC 很有意义。由于 Clang/LLVM 对所有兼容语言都使用语言独立的类型系统,因此可以确定指令的确切语义。...GCC 则没有语言独立类型系统的设计目标。前端解析器:GCC 以前有基于 Bison 的 LR 解析器,后来转向了手写递归下降解析器。Clang 一直使用手写的确定性递归下降解析器,且可回溯。...,有很多编译器选项可以使用高效,LLVM 后端使用了 SSA 表单语言独立类型系统没有有构建工具Make BaseCMake解析器最早采用 Bison LR,现在改为递归下解析器手写的递归下降解析器链接器

    10400
    领券