gpt4 book ai didi

c++ - 模板中的第二阶段编译

转载 作者:行者123 更新时间:2023-11-28 01:51:47 30 4
gpt4 key购买 nike

我正在尝试了解 C++ 模板宇宙中的编译过程和代码生成过程。

我读到在编译的第一阶段只检查基本语法(在模板代码中)。并且仅针对编译完全完成的那些数据类型生成实际代码 - 这称为第二阶段编译。

  1. 我无法理解编译器如何知道可以为哪种数据类型调用模板化代码以及为哪种数据类型生成代码(从而进行第二阶段编译)。在某些情况下,函数调用(在关闭函数模板的情况下)可能无法在编译时直接派生数据类型,这些只能在运​​行时根据用户输入派生。

  2. 假设我使用模板编写了大量代码,并根据这些条件生成模板化代码的新实例(比如说类数据类型的新实例)。我无法测试所有数据类型的代码。那么这是否意味着如果我针对几种数据类型对其进行测试,我的代码仍有可能针对其他一些数据类型意外失败?如果是这样,我如何确保对所有数据类型强制进行第二次编译(无论基于我的输入的数据类型是否被实例化)。

最佳答案

  1. 编译时确定的类型只依赖于静态信息。与特定类型一起使用的函数模板将为该类型生成代码,因为该选项需要在运行时可用。不过,如果可以静态地确定函数调用永远不会发生,我认为编译器可能会忽略该实现,但在某些情况下仍然会强制执行该实现。

  2. 您无法测试所有 数据类型,因为那是一个无限集合。您可以创建一组所有标准类型,但您显然无法检查每个用户定义的类型。通用代码的想法是不依赖于您允许传递给它的类型的细节。或者,您可以关闭可能的实例集以包括您批准的类型。

关于c++ - 模板中的第二阶段编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42767091/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com