zoukankan      html  css  js  c++  java
  • 从c到c++<一>

    • 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++中为1个字节。
    • 声明方式:
        bool result;
        result=true;
    • 可以当作整数用(true一般为1,false为0)

       用代码来验证一下:

      输出结果如下:

    • 把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false

      输出结果:

    【说明】:C语言中是没有此类型的,是用int类型来表示的,可以对比着进行学习,加深印象。

    • 用const给字面常量起个名字(标识符),这个标识符就称为标识符常量;因为标识符常量的声明和使用形式很像变量,所以也称常变量
    • 定义的一般形式:
      ①、const 数据类型 常量名=常量值;
      ②、数据类型 const 常量名=常量值;
    • 例如:const  float  PI=3.14159f;
      下面用代码来实践下,这里另外新建一个cpp文件:



      【注意】:这里从项目中排除并没有直接将文件从项目中删除,只是排除项目之外的文件就不会被编译了,这个需要注意~
    • 注意事项:
      ①、常变量在定义时必须初始化;

      编译结果:


      这时就可正常编译了。
      ②、常变量初始化之后,不允许再被赋值;

      编译:

     以上是关于const的几个注意事项,下面接着对其进行进一步学习:

    接着对它进行赋值:

    这时能编译通过么?

    下面继续,有点折磨人的意思:

    以上的这些现象怎么来理解呢?

    【说明】:const int * p中的"const int"也可以写成"int const"。

    下面再来观测这种写法,语法有点绕,慢慢来理解:

    这如何解释呢?

    所以正确的写法为:

    这是因为:

    但是:

    输出一下:

    这是因为当const在*右边时,经由*p2能更改指针所指向的内容,所以b的内容也发生了变化,注意这些细节,关于const在c++中用法非常丰富,随着后面的学习会进一步总结它的用法。

     我们知道在c语言中可以用#define定义一个符号常量,这里来讨论一下const与#define之间的区别:

    • const定义的常量有类型,而#define定义的没有类型,编译可以对前者进行类型安全检查,而后者仅仅只是做简单替换。
    • const定义的常量在编译时分配内存,而#define定义的常量是在预编译时进行替换,不分配内存。
    • 作用域不同,const定义的常变量的作用域为该变量的作用域范围。而#define定义的常量作用域为它的定义点到程序结束,当然也可以在某个地方用#undef取消。
      如:

     【注意】:定义常量还可以用enum;另外还有一个关键字inline(内联函数,未来会学到),可以代替带参数的宏的用法,也就是在编程时尽量用const、enum、inline替换掉#define的用法,这在上层编程中推荐使用。实际上#define在底层编程中还是很有用的,而且很灵活,这里举个例子来说明:

    编译运行:

    这里只是简单说明一下#define的灵活用法,也是无法被替代的。

    另外#define定义的常量,容易产生副作用,下面例子来自于c++的一本书:

    关于这个,在c语言基础已经学习过了,可以参考该博文有详细的描述:http://www.cnblogs.com/webor2006/p/3462258.html

    这里根据对齐的规则简单的来实践一下,看看跟C语言有没有出入的地方:

    ①、第一个数据成员与结构体变量的偏移量为0,这也说明第一个成员变量的地址跟结构体的地址是一样的,下面用代码进行论证:

    编译运行:

    为啥打印是乱码呢?这是cout跟printf不同的地方, 关于具体原因之后再来解释,这里先来看结果,让其可以正常显示:

    上面结构足以论证了。

    ②、其它成员要对齐到某个数字(对齐数)的整倍数的地址,对齐数取编译器预设的一个对齐整数与该成员大小的较小值

    在vc中,对齐数的设置在:

    ③、整个结构体的大小对齐至最大对齐模数的整数倍。

    这时来打印了下该结构体的大小:

    具体为啥是16可以参数之前的博文的说明,这里就不多说了。今天先学到这,下节继续~

  • 相关阅读:
    Electron(3)调用第三方DLL
    Electron(1)概述
    Java SpringMVC(6)Mybatis-Plus
    Socket粘包问题的3种解决方案
    HTTP
    2020再见 2021你好
    再谈领域驱动设计
    使用Domain-Driven创建Hypermedia API
    使用函数式语言来建立领域模型--类型组合
    PHP安装扩展
  • 原文地址:https://www.cnblogs.com/webor2006/p/4824412.html
Copyright © 2011-2022 走看看