当前位置: 首页 > news >正文

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中有定义,具备类型安全

类型安全是什么

类型安全是指在程序中,变量和表达式在赋值、运算和访问时,其类型是可靠且符合预期的。类型安全可以确保程序在运行时不会发生类型错误,例如变量值被赋予了错误的类型,或者使用了不正确的操作符

类型安全是编程语言设计中的一个重要概念,它有助于提高程序的可靠性和可维护性。在类型安全的语言中,编译器会根据类型信息检查程序的正确性,并捕捉可能存在的不安全或错误操作。这种早期错误检测可以避免程序在运行时出现崩溃或产生意外的结果

类型安全的语言通常具有以下特点:

  1. 静态类型检查:编译器在编译时对程序进行类型检查,而不是在运行时。这有助于在代码执行之前发现潜在的类型错误
  2. 强制类型转换:类型安全的语言通常不允许开发者直接将一种类型的值转换为另一种类型。相反,它们提供了强制类型转换的操作符,以确保类型转换是安全的
  3. 数组和字符串操作:类型安全的语言通常提供对数组和字符串的内置操作,这些操作是类型安全的,可以避免数组越界和字符串拼接错误
  4. 输入检查:类型安全的语言通常会进行输入检查,以防止非法或不安全的输入。例如,它们可以检查输入是否符合预期的格式或范围

值得注意的是,完全的类型安全并不总是可能的。有些语言可能会允许某些类型的未定义行为或类型错误。然而,类型安全仍然是一个有用的工具,可以帮助程序员避免许多常见的错误和问题

懵了?举个例子

假设我们有一个电子秤,我们可以用它来称量不同重量的物品

如果我们将一个重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 二叉树的中序遍历(简单):递归 题目:使用中序遍历二叉树 思想:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历&#xff0…...

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是一个用于布局的参数类,用于指定视图在父容器中的位置和大小。 ​ 下面是设置视图宽度和高度的示例代码: …...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

【网络安全】开源系统getshell漏洞挖掘

审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析,分为​​已启动​​和​​未启动​​两种场景: 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​:当其他组件(如Activity、Service)通过ContentR…...

Vue ③-生命周期 || 脚手架

生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下&#xf…...