首页 > 编程语言 >C++学习笔记——004

C++学习笔记——004

时间:2024-03-18 10:13:59浏览次数:23  
标签:std 字符 函数 int 使用 笔记 C++ 004

  • 字符 '0' 和 '\0' 及整数 0 的区别:字符型变量用于存储一个单一字符,在 C 语言中用 char 表示,其中每个字符变量都会占用 1 个字节(8 位二进制数)。字符 '0':char c = '0'; 它的 ASCII 码实际上是 48,内存中存放表示:00110000。字符 '\0': ASCII 码为 0,表示一个字符串结束的标志。这是转义字符(整体视为一个字符)。由于内存中存储字符,依然是存储的是对应字符集的字符编码,所以内存中的表现形式为 00000000。整型 int 在内存中占用空间为四个字节,表示为 00000000 00000000 00000000 00000000,虽然都是 0,但是跟上面字符 '\0' 存储占用长度是不一样的。

 

  • C++中 "\n" 与 endl 的区别是什么?"\n" 表示内容为一个回车符的字符串。std::endl 是流操作子,输出的作用和输出 "\n" 类似,但可能略有区别。std::endl 输出一个换行符,并立即刷新缓冲区。
std::cout << std::endl;

相当于:

std::cout << '\n' << std::flush;
或者
std::cout << '\n'; std::fflush(stdout);

 

  • 对于有输出缓冲的流(例如cout、clog),如果不手动进行缓冲区刷新操作,将在缓冲区满后自动刷新输出。不过对于 cout 来说(相对于文件输出流等),缓冲一般体现得并不明显。但是必要情况下使用 endl 代替 '\n' 一般是个好习惯。对于无缓冲的流(例如标准错误输出流cerr),刷新是不必要的,可以直接使用 '\n'。在没有必要刷新输出流的时候应尽量使用 cout << '\n',过多的 endl 是影响程序执行效率低下的因素之一。

 

  • 由于流操作符 << 的重载,对于 '\n' 和 "\n",输出效果相同。

 

  • 在声明类的同时定义的对象是一种全局对象,在它的生存期内任何函数都可以使用它。但有时使用它的函数只在极短时间对它进行操作,而它却总是存在,直到整个程序运行结束,因此,容易导致错误和混乱。而采用使用时再定义对象的方法可以消除这种弊端,建议尽可能使用这种方法来定义对象。

 

  • 堆对象的生存期是整个程序的生命期,所以,只有当程序运行结束时,堆对象才被删除。

 

  • 使用静态成员函数的一个原因是,可以用它在建立任何对象之前处理静态数据成员,这是普通成员函数不能实现的功能。编译系统将静态成员函数限定为内部连接,也就是说,与现行文件相连接的其他文件中的同名函数不会与该函数发生冲突,维护了该函数使用的安全性,这是使用静态成员函数的另一个原因。

 

  • 友元关系是单向的,不具有交换性,即类A中将类B声明为自己的友元类,但类B中没有将A声明为友元类,所以类A的成员函数不可以访问类B的私有成员。当两个类都将对方声明为自己的友元时,才可以实现互访。友元关系也不具备传递性,即类A将类B声明为友元,类B将类C声明为友元,此时,类C不一定是类A的友元。

 

  • int main(void)在C++(不是C)中,让括号空着与在括号中使用void等效(在C中,让括号空着意味着对是否接受参数保持沉默)。

 

  • 最后,ANSI/ISO C++标准对那些抱怨必须在main()函数最后包含一条返回语句过于繁琐的人做出了让步。如果编译器到达main()函数末尾时没有遇到返回语句,则认为main()函数以如下语句结尾:
return 0;

这条隐含的返回语句只适用于main()函数,而不适用于其他函数。

 

  • 注意:使用cin和cout进行输入和输出的程序必须包含文件iostream。

 

  • 通常的约定是,退出值为0则意味着程序运行成功,为非零则意味着存在问题。

 

  • 总之,让程序能够访问名称空间std的方法有很多种,下面是其中的4种:
    • using namespace std; 放在函数定义之前,让文件中所有的函数都能够使用名称空间std中所有的元素。
    • using namespace std; 放在特定的函数定义中,让该函数能够使用名称空间std中的所有元素。
    • 在特定的函数中使用类似 using std::cout; 这样的编译指令,而不是 using namespace std; ,让该函数能够使用指定的元素,如cout。
    • 完全不使用编译指令using,而在需要使用名称空间std中的元素前使用前缀std::。  

 

  • C++对于变量名名称的长度没有限制,名称中所有的字符都有意义,但有些平台有长度限制。这一点使得C++与ANSI C(C99标准)有所区别,后者只保证名称中的前63个字符有意义(在ANSI C中,前63个字符相同的名称被认为是相同的,即使第64个字符不同)。

 

  • C++提供了大量的整型,应使用哪种类型呢?通常,int被设置为对目标计算机而言最为“自然”的长度。自然长度(natural size)指的是计算机处理起来效率最高的长度,这意味着计算机使用这种类型时,运算速度可能最快。如果没有非常有说服力的理由来选择其他类型,则应使用int。

 

  • 如果short比int小,则使用short可以节省内存。通常,仅当有大型整型数组时,才有必要使用short。如果节省内存很重要,则应使用short而不是使用int,即使它们的长度是一样的。例如,假设要将程序从int为16位的系统移到int为32位的系统,则用于存储int数组的内存量将加倍,但short数组不受影响。请记住,节省一点就是赢得一点。

 

  • 与int不同的是,char在默认情况下既不是没有符号,也不是有符号。是否有符号由C++实现决定。

 

  • wchar_t类型是一种整数类型,它有足够的空间,可以表示系统使用的最大扩展字符集。这种类型与另一种整型(底层(underlying)类型)的长度和符号属性相同。对底层类型的选择取决于实现,因此在一个系统中,它可能是unsigned short,而在另一个系统中,则可能是int。

 

  • C++11新增了类型char16_t和char32_t,其中前者是无符号的,长16位,而后者也是无符号的,但长32位。C++使用前缀u表示char16_t字符常量和字符串常量,如u'C'和u"be good";并使用前缀U表示char32_t常量,如U'R'和U"dirty rat"。

 

  • 如果在声明常量时没有提供值,则该常量的值将是不确定的,且无法修改。
const int toes;  // value of toes undefined at this point
toes = 10;      // too late!

 

扫码关注公众号,查看更多精彩内容

标签:std,字符,函数,int,使用,笔记,C++,004
From: https://www.cnblogs.com/bobbycheng/p/18079749

相关文章

  • C++面试100问(十一)
    C++中STL中map和set的原理是什么?        map和set的底层实现主要通过红黑树来实现。C++中static和const的区别是什么?        const强调值不能被修改,而static强调唯一的拷贝。C++中关键字static有什么作用?        1)函数体内:static修饰的局部变......
  • 新书速览|轻松学C++编程:案例教学
    零负担学习C++语言的语法,轻松上手C++面向对象程序设计本书简介The19thAsianGames《轻松学C++编程:案例教学》从初学者的角度循序渐进地从C++语言的基础语法到高级语法进行讲解。全书使用生动的实例和图示,介绍C++面向对象程序设计的基础知识;进而通过案例详解类的高级应......
  • C++学习笔记——003
    malloc() 函数在C语言中就出现了,在C++中仍然存在,但建议尽量不要使用malloc()函数。new与malloc()函数相比,其主要的优点是,new不只是分配了内存,它还创建了对象。//一维数组动态分配,数组长度为mint*array=newint[m];//释放内存delete[]array;//二维数......
  • C++ Qt开发:QTcpSocket网络通信组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QTcpSocket组件实现基于TCP的网络通信功能。QTcpSocket和QTcpServer是Qt中用于实现基于T......
  • 05_C++数组指针和指针数组
    1.数组指针:当数组指针指向一个一维数组时,()优先级高,说明p是指针,指向一个整型的一维数组。这个一维数组的长度是n,也可以说p的步长为n。当p+1时,p指针会跨过n个整型数据的长度。2.指针数组:当定义一个一维数组时,系统会在内存中为改数组分配一个储存空间,其数组的变量名就是数组的首地址......
  • Qt/C++监控推流设备推流/延迟极低/实时性极高/rtsp/rtmp推流/hls/flv/webrtc拉流/调整
    一、前言算下来这个推流的项目作品写了有四年多了,最初第一个版本只有文件点播的功能,用的纯QTcpSocket通信实现,属于比较简单的功能。由于文件点播只支持文件形式的推流,不支持网络流或者本地设备采集,所以迫切需要打破这个瓶颈,而后加入核心的网络推流功能,这也是本项目的核心功能,不仅......
  • C/C++中的常用操作符与强制类型转换
    引言:在前两篇博客,我们详细介绍了C语言的基本数据类型和判断操作,相信大家对此已经有所掌握,在本篇博客,我们将继续介绍C语言中常用的几类操作符。一.算数操作符在写代码中,一定会涉及到计算问题,为此,C语言提供了一套操作符,分别是加法:+;减法:-;乘法:*;除法:/;取余数:%;我们依次结合代码讲解......
  • 技术笔记(11)相关概念理解
    技术笔记(11)相关概念理解希望实现的功能或目标:了解学习移动端开发的相关概念‍‍实现过程中产生的疑惑:什么是SDK,JDK?安卓SDK内提供了哪些工具?部署的定义?软件开发生命周期?后处理?‍‍对疑惑的解答:SDK和JDKSDK定义:SoftwareDevelopmentKit,软件开发工......
  • 学习笔记443—UML设计:类图说明及一步一步制作UML类图
    UML设计:类图说明及一步一步制作UML类图什么是类图UML类图是用来描述一个系统的静态结构。它既可以用于一般概念建模也可以用于细节建模。类包含了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。UML类图也可以用于数据建模。它可以用来描述......
  • string类对象成员函数及使用【笔记】
    文章目录一、常见构造二、string类对象的容量操作三、string对象的访问及遍历操作四、string类对象的修改操作(仅列举最常用的)五、getline()一、常见构造//1.空参构造,空字符串string(){}//2.用C-string构造string类对象string(constchar*str){}//3.......