《C++ Primer 第五版》学习笔记-第二章-变量和基本类型

1. C++提供了几种字符类型

    char<字符>可以存放机器基本字符集中的任意字符对应的数字值

    wchar_t<宽字符>可以存放机器最大扩展字符集中的任意一字符

    char16_t和char32_t是Unicode字符,用于表示所有自然语言中字符的标准


2. 字符型分为char, signed char, unsigned char.

    char和signed char并不一样,char由编译器决定表现为有符号还是无符号。因此不要用char做算术运算,要明确指定signed char或者unsigned char


3. 当表达式里既有带符号类型又有无符号类型时,带符号类型会自动转换成无符号类型


4. 以0开头的整数代表八进制数,以0x开头的整数代表16进制数

    例如表示20:  20,  024,  0x14


5. \x后跟一个或多个十六进制数,或者\后跟1个,2个或3个八进制数字,其中数字部分表示的是字符对应的数值

    如字符M对应77, char c=77, \x4d, \115均为字符M


6.const对象必须初始化

    const对象被设定为仅在文件内有效(编译器进行替换,因此文件内必须有定义),如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字

    引用必须在定义时用一个对象进行初始化,初始化之后两者就绑定在了一起,以后也不能修改这样的绑定关系。


7. 初始化常量引用时,允许用任意表达式作为初始值,只要表达式的结果能转换成引用的类型即可。


8. 指向常量的指针可以指向一个非常量对象,然后想要存放常量对象的地址,只能使用指向常量的指针。


9. 常量指针必须初始化

const int *p; //指向常整型的指针P,底层const
const int* const p; //指向常整型的常指针P,必须初始化
int* const p; // 指向整型的常指针P,必须初始化

10. 用于声明引用的const是底层const

    指针类型的const可以是顶层也可以是底层

    其他类型的const都是顶层const


11. 认定一个变量是一个常量表达式的话,就把它声明为constexpr类型


12. 当typedef遇上const

   

typedef char *pstring; //pstring是指向char的指针
const pstring cstr = 0; // cstr是指向char的常量指针
const pstring *ps; // ps是指向char常量指针的指针

13. auto类型必须有初始值,且一条语句声明的多个变量的初始类型必须一样。


14. decltype返回操作数的数据类型

    decltype((var))的结果永远是引用,而decltype(var)只有当 var是引用时结果才是引用。


15. 当表达式的结果对象能作为一条赋值语句的左值时,decltype返回一个引用类型。


16. const用编译器保证对象的bitwise的常量性,mutable可以释放掉non-static成员变量的bitwise constness约束。


17. const修饰类成员变量时,如果是static常量,类内声明,类外初始化;如果是非static常量,在构造函数的初始化 列表中进行初始化。

class A {
public:
    A():name("aaa"){}
private:
    const string name;
};

class B {
public:
    B(){}
private:
    const static string name;
};

const string B::name("bbb"); 
一个特例是,如果static常量的类型是内置的整数类型,如char、int、size_t等,那么可以在类中直接给出初始值,且不需要在类外再进行定义了。编译器会将这种static常量直接替换为相应的初始值,相当于宏替换。但如果在代码中我们像正常变量那样使用这个static常量,如取它的地址,而不是像宏一样只使用它的值,那么我们还是需要在类外给它提供一个定义,但不需要初始值了(因为在声明处已经有了)。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值