Learning CPP(前10章)--21天学通C++第八版笔记

21天学通C++第八版笔记(一)

第三章

  1. sizeof返回的是变量的长度,单位为字节。

    cout << sizeof(bool) //返回1 
         << sizeof(char) //返回1
         << sizeof(int)  //返回4
         << sizeof(float) //返回4
         << sizeof(double) //返回8
         << endl;
    //C++11中有int8_t和uint8_t,分别用于存储8位的有符号和无符号整数,当然还有16,32,64的整型
    
  2. 关键字constconstexpr

    const

    如果变量的值不应改变,就应将其声明为常量,这是一种良好的编程习惯。

    constexpr

    通过关键字 constexpr,可让常量声明像函数:

    constexpr double GetPi() {
          return 22.0/7;}
    

    在一个常量表达式中,可使用另一个常量表达式:

    constexpr double TwicePi() {
          return 2 * GetPi();}
    

    常量表达式看起来像函数,但在编译器和应用程序看来,它们提供了优化可能性。只要编译器能够从常量表达式计算出常量,就可在语句和表达式中可使用常量的地方使用它。在前面的示例中, TwicePi()是一个常量表达式,它使用了另一个常量表达式 GetPi()。这可能引发编译阶段优化,即编译 器将所有的 TwicePi()都替换为 6.28571,从而避免在代码执行时计算 2×22/7 的值。

    GetPi()和 TwicePi()看起来像函数,但其实不是函数。函数在程序执行期间被调用,但 GetPi()和 TwicePi()是函数表达式,编译器将每个GetPi()都替换成了 3.14286,并将每个 TwicePi()都替换成了 6.28571。通过在编译阶段对 TwicePi()进行解析,程序的执行速度比将这些计算放在函数中时更快。

  3. typedef

    systax: 如将int指定为 myInt

    typedef int myInt
    
  4. #define定义常量

    #define pi 3.14286
    //#define 是一个预处理器宏,让预处理器将随后出现的所有 pi 都替换为 3.14286。预处理器将进行文本替换,而不是智能替换。编译器既不知道也不关心常量的类型。
    

    Warning : 使用#define 定义常量的做法已被摒弃,因此不应采用这种做法。

第四章

1. C风格字符串

  • 字符串与字符数组

    std::cout << "Hello World";
    

    等价于

    char sayHello[] = {
         'H','e','l','l','o',' ','W','o','r','l','d',
    	                  '\0'};
    std::cout << sayHello << std::endl;
    

    请注意,该数组的最后一个字符为空字符‘\0’。这也被称为字符串结束字符,因为它告诉编译器, 字符串到此结束。这种 C 风格字符串是特殊的字符数组,因为总是在最后一个字符后加上空字符‘\0’。 您在代码中使用字符串字面量时,编译器将负责在它后面添加‘\0’。

    在数组中间插入‘\0’并不会改变数组的长度,而只会导致将该数组作为输入的字符串处理将到这个位置结束。

    ‘\0’看起来像两个字符。使用键盘输入它时,确实需要输入两个字符,但反斜杆是编译器 能够理解的特殊转义编码, \0 表示空,即它让编译器插入空字符或零。不能将其写做‘0’,因为它表示字符 0,其 ASCII 编码为 48

  • 分析C风格字符串中的终止控制符

    char sayHello[] = {
          'H','e','l','l','o',' ','W','o','r','l','d','\0' };
    cout << sayHello << endl;
    cout << sizeof(sayHello) << endl;
    
    sayHello[5] = '\0';
    cout << sayHello << endl;
    cout << sizeof(sayHello) << endl;
    

    最后的结果是:

    Hello World
    12
    Hello
    12
    

    将数组sayHello中的下标为5的’ ‘换为’\0’,数组的大小(字节)没有变,但是打印出来的变了。

  • 字符数组的存储大小

    char userInput[21] = {
         '\0'};
    //userInput最大只能存储20个字符,因为最后一个字符必须是终止符'\0'
    

第五章

  • int和short的大小(在x64(86位)和x86(32位)下运行,结果一样)

    int 4个字节,32位

    short 2个字节,16位

第七章 函数

1. 用栈理解函数调用

Stack

2. lambda函数速览

lambda 函数是 C++11 引入的,有助于使用 STL 算法对数据进行排序或处理。排序函数要求您提供一个二元谓词,以帮助确定元素的顺序。二元谓词是一个这样的函数,即对两个参数进行比较,并在一个小于另一个时返回 true,否则返回 false。这种谓词通常被实现为类中的运算符,这导致编码工作非常烦琐。使用 lambda 函数可简化谓词的定义

下面给出个例子:

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

void DisplayNums(vector<int>& dynArray) {
   
	for_each(dynArray.begin(), dynArray.end(),
		[](int Element) {
   cout << Element << " "; });
	cout << endl;
}
int main() {
   
	vector<int> myNums;
	myNums.push_back(501);
	myNums.push_back(-1);
	myNums.push_back(25);
	myNums.push_back(-35);
	//打印vector
	DisplayNums(myNums);

	cout << "Sorting them in descending order" << endl;
	sort(myNums.begin(), myNums.end(),
		[](int num1, int num2) {
   return num1 > num2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zedjay_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值