cout还是printf?C++教程 - How to C++系列专栏第4篇
关于专栏
这个专栏是优质的C++教程专栏,如果你还没看过第一篇,点击这里去第0篇
本专栏一致使用操作系统:macOS Ventura,代码编辑器:CLion,C++编译器:Clang
感谢一路相伴的朋友们,感谢你们的支持 ^ _ ^
博主反馈非常及时,如果你在阅读的时候遇到问题,可以直接在评论区提问,博主看到后会在24小时内给你反馈
C++教程 - How to C++系列专栏第4篇
目录
关于专栏
前言
cout和printf的区别
语言层面
printf
cout
实现层面
printf
cout
类型安全是什么
总结
结语
快捷翻页
本文参考文章,书籍
前言
How to C++系列特别篇,让我们探讨一下到底是cout还是printf适合我们
cout和printf的区别
语言层面
printf
printf属于C语言stdio.h头文件,是C语言的组成部分,是C语言标准库中的函数,用于向标准输出设备按规定格式输出信息
cout
cout属于C++的iostream头文件,不同于printf,cout属于原生C++的输出
实现层面
我们知道,cout和printf的基础功能是一样的:在屏幕上打印我们要求输出的字符
printf
printf其实是C语言中的一种函数,printf实际上是调用了一个函数,C作为C++的子集,自然在C++中也可以使用printf,但并不具备类型安全(具体看下面)
cout
cout本质上来讲其实是一个对象,属于ostream类,ostream类在iostream中有定义,具备类型安全
类型安全是什么
类型安全是指在程序中,变量和表达式在赋值、运算和访问时,其类型是可靠且符合预期的。类型安全可以确保程序在运行时不会发生类型错误,例如变量值被赋予了错误的类型,或者使用了不正确的操作符
类型安全是编程语言设计中的一个重要概念,它有助于提高程序的可靠性和可维护性。在类型安全的语言中,编译器会根据类型信息检查程序的正确性,并捕捉可能存在的不安全或错误操作。这种早期错误检测可以避免程序在运行时出现崩溃或产生意外的结果
类型安全的语言通常具有以下特点:
- 静态类型检查:编译器在编译时对程序进行类型检查,而不是在运行时。这有助于在代码执行之前发现潜在的类型错误
- 强制类型转换:类型安全的语言通常不允许开发者直接将一种类型的值转换为另一种类型。相反,它们提供了强制类型转换的操作符,以确保类型转换是安全的
- 数组和字符串操作:类型安全的语言通常提供对数组和字符串的内置操作,这些操作是类型安全的,可以避免数组越界和字符串拼接错误
- 输入检查:类型安全的语言通常会进行输入检查,以防止非法或不安全的输入。例如,它们可以检查输入是否符合预期的格式或范围
值得注意的是,完全的类型安全并不总是可能的。有些语言可能会允许某些类型的未定义行为或类型错误。然而,类型安全仍然是一个有用的工具,可以帮助程序员避免许多常见的错误和问题
懵了?举个例子
假设我们有一个电子秤,我们可以用它来称量不同重量的物品
如果我们将一个重10公斤的物品放在电子秤上,然后将其设置为称量1公斤的物品,那么电子秤就会因为重量超出了预设范围而无法正常工作
在编程中,类型安全的作用类似于这个电子秤
假设我们有一个函数,该函数接受一个字符串作为输入,并将其转换为整数。如果我们将一个包含非数字字符的字符串传递给该函数,那么该函数就会因为无法将非数字字符转换为整数而抛出异常或错误。这就是类型安全的作用,它确保了程序在运行时不会因为类型错误而崩溃或产生意外的结果。
在现实生活中,类型安全的概念可以应用于许多不同的场景。例如,当我们使用银行卡支付时,我们的交易金额必须与卡的限额匹配,否则交易就会失败。当我们使用医疗设备时,我们必须确保输入的数据是正确的类型和范围,否则可能会导致错误的诊断或治疗
总之,类型安全是一种编程概念,它确保了程序在运行时不会因为类型错误而崩溃或产生意外的结果。在现实生活中,类型安全的概念可以应用于许多不同的场景
C语言在这方面做的并不好,在C语言中,变量的类型通常是在声明时确定的,如果大家学到后面会明白,实际上变量只是一个内存地址,这个地址存储特定类型的值。程序员可以直接访问该地址,并使用任何可用的数据类型。因此,在C中类型检查不是强制性的,而是由程序员自己负责的
与此相比,C++引入了静态类型检查,这意味着编译器会在编译时执行类型检查。C++中的每个变量都有其特定的类型,并且不允许直接将一个类型的值赋给另一个类型的变量,除非进行显式的类型转换
总结
其实我们可以看出,cout可能在某些环境下效率没有printf高,但总体来说,cout具备的功能确实跟优秀,并且具备类型安全,不会把程序员搞的一头雾水,满脸懵
当然,任何工具都有好有坏,在一些情况下确实printf更好用,cout也有缺点
在我们之后的学习中一般会使用cout作为输出
结语
作者会经常帮助有问题的小伙伴解决问题如果你有问题,可以直接到评论区指出,作者会在看到后到24小时内给予答复
如果本文有任何问题欢迎在评论去指出,如果喜欢这篇文章,希望能点赞评论关注
感谢一路相伴的朋友们,有你们是我的福气
如果你们身边有像你提起过这个领域的,或者希望可以和ta一起进步的,把这个专栏分享给ta吧
2400字,7个父项,2个子项,5个孙子项
快捷翻页
C++教程 - How to C++系列专栏第0篇
C++教程 - How to C++系列专栏第1篇
C++教程 - How to C++系列专栏第2篇
C++教程 - How to C++系列专栏第3篇
本文参考文章,书籍
参考文章
文心一言
C++ 中 printf 和 cout 什么区别? - 知乎
https://wenku.csdn.net/answer/9f0f30f47cc346d49f77ece1c2124349
C++ 中 printf 和 cout 什么区别? - 知乎
C++ 中 printf 和 cout 什么区别? - 知乎
参考书籍
C++ Primer Plus
相关文章:
cout还是printf?C++教程 - How to C++系列专栏第4篇
关于专栏 这个专栏是优质的C教程专栏,如果你还没看过第一篇,点击这里去第0篇 本专栏一致使用操作系统:macOS Ventura,代码编辑器:CLion,C编译器:Clang 感谢一路相伴的朋友们,感谢…...
Linux NTP原理及配置使用
一、NTP简介 1.NTP简介 NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的…...
SAP系统是什么呢?它有哪些优势?
SAP系统是全球知名的企业资源规划(ERP)解决方案供应商。它集成了财务、供应链管理、人力资源管理、销售和客户关系管理等多个功能模块,为企业提供全面、集成的管理体验。SAP系统已成为各行各业企业管理的智慧选择,极大地提升了管理…...
js数组学习(ES6+)
文章目录 js(ES6)数组学习1.Array.prototype.forEach(fn)2.Array.prototype.map(fn)3.Array.prototype.filter(fn)4.Array.prototype.reduce(fn)5.Array.prototype.some(fn) every6.Array.prototype.find(fn)7.Array.prototype.includes(item) js(ES6)数组学习 1.Array.protot…...
DoIP诊断入门
简介 DoIP(Diagnosis over Internet Protocol)是一种用于车辆诊断的网络通信协议。它基于现代互联网技术,允许通过以太网或IP网络进行车辆诊断和通信。 DoIP的背景是现代车辆中使用的电子控制单元(ECU)数量不断增加&…...
Amazon CloudFront 部署小指南(五)- 使用 Amazon 边缘技术优化游戏内资源更新发布...
内容简介 游戏内资源包括玩家的装备/弹药/材料等素材,对游戏内资源的发布和更新是游戏运营商的一个常规业务流程,使用频率会十分高,所以游戏运营商希望该流程可以做到简化和可控。针对这个需求,我们设计了 3 个架构,面…...
undefined reference to `dlopen‘ ‘SSL_library_init‘ `X509_certificate_type‘
使用Crow的时候需要注意crow依赖asio依赖OpenSSL,asio要求1.22以上版本,我使用的是1.26.0; 这个版本的asio要求OpenSSL是1.0.2,其他版本我得机器上编不过,ubuntu上默认带的OpenSSL是1.1.1; 所以我下载了OPENSSL1.2.0重…...
DHCPv6之GitHub项目Android侧验证
一、adb里面安装busybox 1、下载busybox 下载网址:Index of /downloads/binaries/1.21.1 (busybox.net),目前最新是1.21.1版本 根据项目选择busybox-armv7l ,右键另存为下载到本地目录,下载后去掉文件的后缀名,变成如…...
简单易懂的 Postman Runner 参数自增教程
目录 什么是 Postman Runner? Postman Runner 如何实现参数自增? 步骤一:设置全局参数 步骤二:将全局参数带入请求参数 步骤三:实现参数自增 资料获取方法 什么是 Postman Runner? Postman Runner 是…...
BeanFactory与Applicationcontext(1)
BeanFactory是接口,提供了IOC容器最基本的形式,给具体的IOC容器的实现提供了规范。BeanFactory是spring的“心脏”,核心容器,它也是Applicationcontext的父接口。 BeanFactory实质上并未提供过多的方法,spring容器的I…...
C++初阶之模板深化讲解
模板深化讲解 非类型模板模板的特化1.函数模板特化2.类模板特化 模板分离编译1.什么是分离编译2.模板的分离编译 模板总结 非类型模板 非类型模板(Non-Type Template)是 C 中的一种模板形式,它允许你在模板中传递除了类型以外的其他值&#x…...
Redis数据结构——整数集合
定义 整数集合是集合的实现方式之一,当一个集合只包含整数值元素时,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合的底层实现。 整数集合就是存放整数的一个数组,整数集合的结构体定义: typeof struc…...
背上大书包准备面试之CSS篇
目录 H5 新特性 css3新特性? 为什么要初始化css样式? 浏览器兼容性问题? css sprites(css精灵图)? css盒模型是什么样的? 页面中一个块元素的宽度包含了盒模型中的哪些部分?…...
linux系列基本介绍
虽然我们常说Linux操作系统,这种叫法是不正确的,严格意义上讲,Linux并不是操作系统,而是属于操作系统的一个内核,inux内核提供了操作系统的核心功能,如进程管理、内存管理、文件系统等。 Linux有很多不同的…...
vue.draggable浅尝
介绍 Vue.Draggable是一款基于Sortable.js实现的vue拖拽插件。支持移动设备、拖拽和选择文本、智能滚动,可以在不同列表间拖拽、不依赖jQuery为基础、vue 2过渡动画兼容、支持撤销操作,总之是一款非常优秀的vue拖拽组件。本篇将介绍如何搭建环境及简单的…...
Tree相关
1.树相关题目 1.1 二叉树的中序遍历(简单):递归 题目:使用中序遍历二叉树 思想:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历࿰…...
git日常操作-案例
文章目录 查看远程有那些分支 查看远程有那些分支 git ls-remote --heads origin...
cmake链接.lib库
当使用CMake编写CMakeLists.txt文件来链接其他文件夹的.lib库文件时,你需要做以下几个步骤: 设置库文件路径: 使用 link_directories() 函数设置要搜索库文件的路径。例如: link_directories(${CMAKE_SOURCE_DIR}/path/to/libra…...
SkyWalking 部署(包含ES)
SkyWalking安装 结构 首先SkyWalking主要需要oapService、webApp、Elasticsearch(可选存储)三个,接下来讲一下这三个的安装步骤,安装过程中出现了一些细小的配置错误,导致用了快两天才弄好,麻木了&#x…...
Android学习之路(2) 设置视图
一、设置视图宽高 在Android开发中,可以使用LayoutParams类来设置视图(View)的宽度和高度。LayoutParams是一个用于布局的参数类,用于指定视图在父容器中的位置和大小。 下面是设置视图宽度和高度的示例代码: …...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候,显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...
