C++相对于C部分新增关键字

alignof
获取类型或变量的当前对齐方式

cout <<"alignof xx = "<< alignof(char)<< endl;

alignas
注意只能往大了对齐,比如int类型不能按2字节对齐

alignas(16) int a;//以16字节对齐int类型

typeid
获取当前变量的类型

signed char c;
cout << "typeid is "<

nullptr
简单来说是代替C中的NULL的作用,因为在C++中使用NULL有歧义。

auto
auto在C在修饰局部变量,可以忽略,在C++中是一个新的关键字
其作用是由编译器自动推导出变量类型

auto i = 8;
cout <<"typeid of i is "<

结果是:
typeid of i is i

decltype

 int a = 9;
 decltype(a)  b  ;//b的类型为int

作用和auto类似,区别是:

  1. auto忽略顶层const,而decltype则保留const
  2. 对引用操作,auto推导出原有类型,decltype推导出引用
  3. auto推倒时会执行,decltype不会执行,只做分析

virtual
修饰类乘员变量为虚函数
override
用来在派生类中成员函数声明时明确表明需要派生类去重写的那些成员方法,这样如果程序员在成员方法实体定义中做的不对编译器可以报错提醒
final
(1)一个class不希望被继承(不想做父类),可以定义时用final修饰
(2)一个成员方法不希望被子类override,可以声明时用final修饰

friend
修饰函数为友元函数,让不属于一个class的外部函数也能访问class内受保护的成员变量
explicit
用来修饰只有一个参数的构造函数,以阻值构造函数不合时宜的类型转换
const
c++新增用法:

  • const引用,主要用于函数传参,限制函数内部对实参的修改
  • const成员函数,限制函数内部对成员变量的修改
class A
{
public:
    int i;
    int func(void) const  //const放后面修饰
    {
        this->i = 3;  //readonly 报错
    }
};


int main(void)
{
    A a;
    a.i = 1;
    a.func();
    cout << "i = "<< a.i<

mutable
用来突破const修饰成员函数的限制,让其可以改变特定的成员变量

class A
{
public:
    int j;//j不能被乘员函数改变 
    mutable  int i;  //现在i可以被成员函数改变
    int func(void) const
    {
        this->i = 3; //不报错
		this->j = 4;//报错
    }
};


int main(void)
{
    A a;
    a.i = 1;
    a.func();
    cout << "i = "<< a.i<

constexpr
一种优化手段

constexpr int multiply (int x, int y)
{
    return x * y;
}
const int val = multiply( 10, 10 );		// 将在编译时计算,如果没有constexpr则在运行时CPU运算
//用constexpr修饰后可以当成const int val = 100;

你可能感兴趣的:(YT的学习笔记,c++)