Sunday, March 20, 2022

[C++] Primer - 大多数编译错误在实例化期间报告

模板直到实例化时才生成代码,所以获得模板代码编译错误的时机较晚。编译器在3个阶段报告错误:

1. 第一阶段是编译模板本身时,此时一般错误很少,只是检查语法错误,不检查依赖于类型的代码

第二个阶段是遇到使用模板时,对函数模板调用编译器会检查实参数目是否正确。还要检查参数类型是否匹配。对类模板来说,编译器检查用户是否提供了正确的模板实参,但也仅限于此。

第三个阶段是模板实例化时,只有这个阶段才能发现类型相关的错误。依赖于编译器如何管理实例化,这类错误可能在链接时才报告。

编写模板代码不能针对特定类型,但模板代码通常对其所用的类型有一些假设。比如compare就会假设实参支持<运算符。

如果实例化T类型不支持<,那么就会在第三个阶段报错。

No comments:

Post a Comment

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能