《C++ Primer(第五版)》静态类型检查概念疑问
关于C静态类型检查的疑问(来自《C Primer 第五版》第46页)
正如我们所见,对象的类型会限制其能执行的操作。在C++中,编译器会检查我们编写的操作是否为所用类型所支持。若尝试执行类型不支持的操作,编译器会生成错误信息且不生成可执行文件。
我在阅读这段内容时产生了疑问:作者所说的静态类型检查,到底是指验证类型本身是否定义了某操作(比如确认自定义类型Calc是否包含Add()方法),还是指检查用户调用类型未定义的操作时触发错误(比如调用Calc未定义的Multiply()方法)?我曾搜索“static typing C++ primer”,但没找到相关问题。
回答
- 这两种描述其实是静态类型检查的一体两面,编译器的静态类型检查同时覆盖这两个逻辑:
- 首先,编译器会明确知晓每个类型的定义(比如
Calc类是否声明了Add()方法),这是静态检查的基础依据; - 其次,当你写出调用
Calc::Multiply()这类代码时,编译器会立刻对比Calc的类型定义,发现该操作未被支持,随即抛出编译错误——这正是书中描述的“检查操作是否为类型所支持”的具体表现。
简单来说:类型本身的操作定义是静态检查的前提,而拦截用户对未定义操作的调用是静态检查的执行结果,二者是静态类型检查过程中不可分割的部分,并非二选一的关系。
内容的提问来源于stack exchange,提问作者ZoomIn
相关产品推荐
相关产品推荐

