四季

Seasons

一、列表初始化

1.1 出现原因

C++98/03 中的对象初始化方法有很多种方法,这些不同的初始化方法,都有各自的适用范围和作用。最关键的是,这些种类繁多的初始化方法,没有一种可以通用所有情况。

Read more »

一、概述

1.1 概念与术语

radosgw多站点指的是在多个地理位置或数据中心之间进行数据复制和同步,用于实现负载均衡、灾备恢复以及满足数据在特定地理位置存储要求。

  • zone:
    多站点中最小的配置单元,通俗指在同一地域内,电力和网络互相独立的物理区域。每个 zone 都有一个或多个 ceph-radosgw 实例。

  • zone group:

    由一个或多zone组成,包含一个master zone,其它zone称为secondary zone,zone group内的zone之间同步数据,以实现数据备份和灾难恢复。并且支持active-active与active-passive两种模式。

  • realm:

    由一个或多zone group组成,包含一个master zone group,其它zone group称为secondary zone group。

  • period

    跟踪zone、zone group和realm的配置状态。

Read more »

一、new/delete

1.1 为什么需要new/delete

 C语言中通过malloc/free等函数实现动态内存管理,为什么C++中还引入new/delete对动态内存管理?原因在于:malloc/free等函数不能满足对自定义类型的对象管理要求,对象在创建时要自动调用构造函数,对象在销毁前要自动调用析构函数,由于malloc/free是库函数而不是运算符,编译器不能把调用构造函数和析构函数的任务强加给它们。因为C++需要一个能够完成动态内存分配和初始化工作的运算符new,以及一个能够完成资源释放和释放内存工作的运算符delete

注意:new/delete是运算符,而不是函数

Read more »

一、深度刨析构造函数

1.1 编译器对构造函数的优化

比较新的C++编译器在一行语句里面,若存在连续的构造函数(拷贝构造函数)调用,编译器对其优化为一次调用。注意:C++标准并没有规定必须要进行优化
在这里插入图片描述

Read more »

前言:C++编译器默认在类中生成六个特殊的成员函数,如果在类中显式定义相对应的成员函数,编译器则不会生成对应成员函数

一、构造函数

1.1 什么是构造函数

 根据经验,不少难以察觉的程序错误都是由于变量没有正确初始化导致的,而初始化工作很容易被人遗忘。C++中引入构造函数的概念,构造函数是一个特殊的成员函数,函数名与类名相同,实例化对象时由编译器自动调用构造函数,保证对象中的成员变量都被正确初始化。构造函数在对象的生命周期内只调用一次。注意:构造函数的作用是初始化对象,而不是为对象分配内存空间。

 构造函数不显式定义时由编译器自动生成,当显式定义构造函数时,编译器不会自动生成。构造函数的函数名必要与类名一致,并且没有返回值(void也不行)。

Read more »

一、面向过程与面向对象编程

 我们经常听别人谈起C语言是面向过程的编程语言,而C++是面向对象的编程语言。但是你让他具体说下什么是面向过程、什么是面向对象可能他很难说清楚。今天鄙人拙见谈谈什么是面向过程、什么是面向对象的看法。不管是面向什么都要把程序写出来,那程序是什么?计算机编程领域的祖师爷尼古拉斯•威茨曾经说过程序=数据结构+算法所以程序的本质:为了解决某个问题,选择合适的数据结构和算法进行若干步骤的求解。对于一个问题求解的思路有很多种,我认为面向过程与面向对象编程的区别就是对问题分析求解的思想不同

Read more »

一、基于范围for循环

  在C/C++中经常需要遍历数组做某些事情,数组的遍历边界由程序员自己控制,经常有人粗心导致数组越界。并且遍历写起来比较繁琐

1
2
3
4
5
int arr[] = { 1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
cout << arr[i] << endl;
}

C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的对象。由于不知道被迭代对象的元素是什么类型,我们可以使用auto

Read more »

一、引用

1.1 引用是什么

 想必大家都读过四大名著之一的《水浒传》,小说中每个英雄除了有自己本身的名字以外,根据人物外表性格还有许多绰号。比如:宋江又叫:及时雨、呼保义、孝义黑三郎、宋公明、宋押司。李逵又叫铁牛、黑旋风。C++引入了引用这个概念,引用不是新定义一个变量,而是给已存在变量取了一个别名。在语法层面:编译器不会为引用变量开辟内存空间,它和引用的变量共用同一块内存空间

Read more »

前言:自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。

一、函数重载

1.1 函数重载是什么

 C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表必须不同(参数个数 或 参数类型 或 参数顺序),常用来处理功能类似数据类型不同的问题。C++编译器会根据传入函数参数类型、参数个数、参数顺序调用相对应的重载函数。

Read more »

一、什么是缺省参数

缺省参数:是在函数声明或函数定义时为形参指定一个默认值,当调用函数时没有传入对应实参则将默认值做为实参传给形参

注意:函数声明与函数定义中不能同时定义缺省参数,下面代码为错误代码

1
2
3
4
5
6
7
8
void Print(int x = 10,int y = 20,int z = 30); // 函数声明

void Print(int x = 10,int y = 20,int z = 30);
{
cout << "x = " << x << endl;
cout << "y = " << y << endl;
cout << "z = " << z << endl;
}

说明:

  1. 在函数声明与函数定义时都写缺省参数,极容易将两个地方默认值设置的不一致,导致编译器不知道以哪一个默认值为准,所以编译器直接不允许在两处同时写缺省参数
  2. 推荐将缺省参数写在函数声明处,一般调用其他人实现函数我们只需要看函数声明知道用法,而不会去看函数定义了解函数怎么实现
Read more »
0%