广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++的静态类型检查详解
  • 819
分享到

C++的静态类型检查详解

2024-04-02 19:04:59 819人浏览 薄情痞子
摘要

目录什么时候引进的?一个有趣的观察窄转换警告的使用总结什么时候引进的? 在带类的C的时候,引进了静态(“强”)类型检查。 bjarne在《The Design

什么时候引进的?

在带类的C的时候,引进了静态(“强”)类型检查。

bjarne在《The Design and Evolution of c++ 》介绍:

在经历过Simula和AlGol68的经验之后,静态类型检查对于我而言已经是一种必需品,唯一的问题是如何把它加进来

一个有趣的观察

学过带类的C(或C++)的程序员竟丧失了寻找由于简单类型错误而造成的运行错误的能力。由于他们逐渐习惯于依赖带类的C(或C++)所提供的类型检查和类型转换,甚至丧失了快速地发现某些愚蠢错误的能力,而这些错误是由于缺乏检查而混进C程序的。进而他们也不能为避免这种愚蠢错误而采取预防措施,而好的C程序员则会把这些看作是理所当然的事情(好的C程序员牛B)。

当习惯了某种便利时,如果便利突然消失,将不知多措。

窄转换

C语言中没有对类型转换做任何检查;考虑如下代码

void f()
{
	long int lng = 65000;
	int i1 = lng; // i1 becomes negative -536 on Machines with 16 bit ints

	int i2 = 257;
	char c = i2; // truncates: c becomes 1 on machines with 8 bit chars
}

当bjarne起初尝试禁止所有不能保持值不变的转换,也就是说,只要想把一个大的对象存储到较小的对象里,就要求明显地写出转换运算符:

void g(long lng, int i)
{
	int i1 = lng; // error: narrowing conversion
	i1 = (int)lng; // truncates for 16 bit ints
	
	char c = i; // error: narrowing conversion
	c = (char)i; // truncates
}

这个试验失败得很惨。因为检查了每个C程序都包含大量从int到char变量的赋值(都是正常工作的程序,绝大数必然是安全的);在带类的C的团体中,没有人希望这样背离C语言。所以无法禁止所有不能保持值不变的转换。那还有什么弥补的措施吗? 有,编译器警告。

警告的使用

当发现C语言里那些我认为极端严重而不能忽略的弱点,但这些弱点又因为在C语言的结构里根深蒂固而无法去除。就让C++的编译系统发出警告。

例如:

 int main()
 {
     double d = 3.14;
     int k = d;
     char c = k;
     return 0;
 }

编译:

g++ main.cpp -Wconversion -o main

在这里插入图片描述

当前g++版本中如果需要显示这些警告需要的加上-Wconversion才会显示(-Wall中也没有包含,体外话,-Wall 是 Warnning all的缩写)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!  

--结束END--

本文标题: C++的静态类型检查详解

本文链接: https://www.lsjlt.com/news/139826.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++的静态类型检查详解
    目录什么时候引进的?一个有趣的观察窄转换警告的使用总结什么时候引进的? 在带类的C的时候,引进了静态(“强”)类型检查。 bjarne在《The Design...
    99+
    2022-11-13
  • Java中怎么检查静态类型
    Java中怎么检查静态类型,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。关于静态类型检查和动态类型检查的解释:静态类型检查:基于程序的源代码来验证类型安全的过程...
    99+
    2023-05-30
    java
  • Typescript类型系统FLOW静态检查基本规范
    目录类型系统强类型和弱类型(类型安全)静态类型与动态类型(类型检查)JavaScript自由类型系统的问题Flow静态类型检查方案Typescript语言规范与基本应用Typescr...
    99+
    2022-11-13
  • C++类的静态成员变量与静态成员函数详解
    目录1、类的静态成员变量2、静态成员函数总结1、类的静态成员变量 C++类的静态成员变量主要有以下特性: 1.静态成员变量需要类内定义,类外初始化 2.静态成员变量不依赖于类,静态成...
    99+
    2022-11-12
  • Groovy 2.0静态类型检查及如何使用编译功能
    Groovy 2.0静态类型检查及如何使用编译功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Groovy开发团队近日发布了2.0的版本,Groovy是基于Java虚拟机(J...
    99+
    2023-06-17
  • Python中类型检查的详细介绍
    前言 大家都知道Python 是一门强类型、动态类型检查的语言。所谓动态类型,是指在定义变量时,我们无需指定变量的类型,Python 解释器会在运行时自动检查。 与静态类型语言(如 C 语言)相比,这不仅仅...
    99+
    2022-06-04
    详细介绍 类型 Python
  • 如何理解C++类的静态成员
    这期内容当中小编将会给大家带来有关如何理解C++类的静态成员,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。静态数据成员的值对每个对象都是一样,这些对于一些专业的程序员来说进行静态成员函数实现是一件非常头疼...
    99+
    2023-06-17
  • C++的静态成员变量和静态成员函数详解
    目录一.static修饰变量二.static修饰函数三.static在类中使用1.创建与初始化 2.使用问题 3.在public、private下static变量使用 四.class...
    99+
    2022-11-12
  • 详解Anyscript开发指南绕过typescript类型检查
    目录前言场景设定解决方法注释忽略场景用例类型断言场景用例泛型转换场景用例总结前言 随着越来越多的前端项目采用 typescript 来开发,越来越多前端开发者会接触、使用这门语言。它...
    99+
    2022-11-13
  • C#高级静态语言效率利器之泛型详解
    目录引入类型约束子类泛型常用的泛型数据结构泛型委托引入 所谓泛型,就是创建一个函数,对所有数据类型都生效。最常见的例子就是运算符,毕竟1+1=2,1.0+1.0=2.0,足以看出+是...
    99+
    2023-02-27
    C#泛型使用 C#泛型
  • C++Cmake的构建静态库和动态库详解
    目录静态库和动态库的区别构建示例ADD_LIBRARY同时构建静态和动态库SET_TARGET_PROPERTIES动态库的版本号安装共享库和头文件使用外部共享库和头文件解决 :ma...
    99+
    2022-11-13
  • 怎么理解C++类的静态成员变量与静态成员函数
    本篇内容介绍了“怎么理解C++类的静态成员变量与静态成员函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、类的静态成员变量C++类的静态...
    99+
    2023-06-25
  • 详解C#中检查null的语法糖
    目录函数参数null检查传统写法ThrowIfNullC# 11的!!语法(已经取消)有关null的一些操作=.[]一些操作结语今天看到已经更新了devblogs,新增的C# 11的...
    99+
    2022-11-13
  • C++ 的类型转换详解
    目录一、C++ 类型转换1.静态类型转换1.语法格式2.转化规则 2.重解释类型转换1.语法格式2.转化规则 3.常类型转换1.语法格式2.语法规则 3.const 常变量(补充) ...
    99+
    2022-11-12
  • C++类与对象深入之静态成员与友元及内部类详解
    目录一:静态成员1.1:静态成员分类1.2:静态成员变量1.3:静态成员函数1.4:总结特性1.5:试题示例1.6:C++11成员初始化新玩法二:友元2.1:全局函数做友元2.2:类...
    99+
    2022-11-13
  • Unity3D 单例模式和静态类的使用详解
    Unity3D的API提供了很多的功能,但是很多流程还是会自己去封装一下去。当然现在网上也有很多的框架可以去下载使用,但是肯定不会比自己写的用起来顺手。 对于是否需要使用框架的问题上...
    99+
    2022-11-12
  • c++中的基本IO类型详解
    引言 c++不直接处理输入和输出,而是通过标准库中的类型处理IO。IO的设备可以是文件、控制台、string。c++主要定义了三种IO类型,分别被包含在iostream、fstrea...
    99+
    2022-11-12
  • 详解C++11中的类型推断
    C++11中的类型推断 C++11中为了更好的支持泛型编程,提供了 auto和decltype两个关键词,目的就是提供编译阶段的自动类型推导。 1.auto关键词的新意义 在C++9...
    99+
    2023-01-31
    C++11类型推断 C++11推断
  • Android检查手机网络状态及网络类型的方法
    本文实例讲述了Android检查手机网络状态及网络类型的方法。分享给大家供大家参考。具体分析如下: //judge network status is connecting ...
    99+
    2022-06-06
    方法 网络类型 手机 Android
  • C语言静态与动态通讯录的实现流程详解
    目录静态通讯录contact.hcontact.ctest.c动态通讯录contact.hcontact.cqsort.ctest.c本次通讯录的代码已经放到我的Gitee仓库中,感...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作