查漏补缺,巩固基础——C++Primer之旅day2

变量初始化

        C++支持两种初始化变量的形式:复制初始化和直接初始化。复制初始化语法用等号(=),直接初始化是把初始化式放在括号中。

intival (1024);             //直接初始化

int ival = 1024;            //复制初始化

        需要注意的是,初始化并不是赋值,使用=来初始化变量与赋值是不一样的。并且在这两种初始化方式中,直接初始化语法更灵活,效率更高(为什么?)。

内置类型变量的初始化规则

        内置类型变量是否初始化取决于变量定义的位置。在函数体外定义的变量都初始化为0,在函数体内定义的内置类型变量不进行初始化。事实上,未初始化的变量都有一个随机的值,由此可能引起未知的错误。

全局作用域

        定义在所有函数外部的变量具有全局作用域,可以在程序的任何地方访问。    

const对象默认为文件的局部变量

        在全局作用域里定义非const型的变量时,它在整个程序中都可以访问。与其它变量不同,除非特别说明,在全局作用域声明的const型变量是定义该对象的文件的局部变量,即只存在于本文件,不能被程序的其它文件访问。

然而,通过指定const变量为extern,就可在整个程序中访问它。

extern的一些用法

         一、修饰符extern用在全局变量或者函数的声明前,用来说明“此全局变量/函数是在其它源文件定义的,要在此处引用”。

         二、当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样),为什么这么做呢,因为C++支持函数的重载 

指向const对象的引用

        指向const对象的引用可以初始化为不同类型(但类型相关,如int和double)的对象或者初始化为右值,如字面值常量:

        int i  =  42;

        const int  &r  =  42;//ok

        const int  &r2  =  r + i;//ok

        然而,非const引用只能初始化为与它同类型的对象。

        int &r3  =  i;//ok

        int &r4  =  42;//error

枚举

        枚举的定义:(关键字) enum    枚举类型名  {枚举成员列表};

        如:enum  open_modes  {input,output,append};

        默认第一个枚举成员赋值为0,其后的每个成员比前一个成员的值大1。枚举成员是常量,用来初始化枚举成员的值必须是一个常量表达式。枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其它对象来进行。

头文件设计规范

        在设计头文件时要注意,头文件用于声明而不是定义。有三个例外,头文件可以定义类、一些作为常量表达式的const对象和inline函数。

 


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值