模板化代码的有效性是什么意思



非模板代码的有效性对每个人来说或多或少都很清楚 - 编译器检查语法、类型和规则。编译器拥有执行这些检查所需的一切。

但是当编译器必须编译模板化代码(例如 STL 或 Boost(时,它没有足够的信息。当模板化代码未实例化时,编译器不知道操作的含义,是否为将用于实例化此模板化代码的类型定义操作等。在实例化之前,无法编译模板化代码。

模板化代码的有效性有这样的东西吗?它是否需要我们编译模板化代码的每个实例化来验证其有效性?

标准谈到了这种有效性:

可以在任何实例化之前检查模板的有效性。[注意:知道哪些名称是类型名称允许以这种方式检查每个模板的语法。

正如注释所说,可靠的检查仅仅是句法(或基于语法的(。 甚至像查找非依赖名称这样的规则也包含在以下规则中:任何无法实例化的模板都是格式错误的,无需诊断。 然后,该实现可以执行任何操作,包括编译一个执行...东西。 (这真的是太多的实现自由;其中一些规则可能只是"由实现自行决定的格式不正确(带有诊断("。

最新更新