《读java编程思想》 c++与java的不同(C++基础)

最近读了《java编程思想》前十章,对java的基本概率有了大概的了解,所以重读一下《c++编程思想》,比较一下两种思想的不同

  1. C++的基本思想是高效,而Java是更多考虑面向对象特性和正确性
  2. C++中只规定每一种不同类型的最大值和最小值必须是一致的,所以不同 的机器占用的存储可能不同,需要sizeof一元运算符
  3. C++默认为外部连接,用static表示内部连接
  4. C++支持四种显示的类型转换。从这些转换可以看出C++给程序员多大的自由度
  5. C++调试技巧: #为字符串化运算符,##为表示粘贴
  6. 可以通过友元访问私有成员。嵌套的结构并不能自动访问private成员(这和java显然不同)。必须首先申明(而不是定义)一个嵌套结构,然后申明它是全局友元,然后再定义这个结构。说明:程序运行之前,所有的访问信息都消失了,访问信息在编译期间消失!在程序运行期间,所有的访问说明信息都小时了,对象变成了一个存储区域,别无他物
  7. C++指向函数的指针
    • void  * (*(*fp1)(int))[10];
    • float (*(*fp2)(int, int))(int);
    • int (*(*fp4())[10]();
  8. 对象超出作用域的时候,编译器自动调用析构函数(注意:java不确定对象什么时候被清除),注意非局域的goto语句将不会引发析构函数调用
  9. C++认为如果默认构造函数做一些智能化的工作,比如内存置零,会增加额外的负担,而且是程序员无法控制
  10. 不要把默认参数作为一个标志去决定执行函数的那一块,这是基本原则。一个默认参数应该是一个在一般情况下放在这个位置的值
  11. C++中的常量:#define值替换,在预处理阶段存在,可能引入错误;头文件中的const默认为内部连接,当定义一个const时默认不创建存储空间,而保存在符号表中,而如果显示使用extern const说明,就强制分配存储空间。const可以用于集合,但是这时意味着“不能改变的一块存储空间”,所以在编译期间知道存储的内容,下面的代码是错误的
    const int i[] = {1, 2, 3};
    //! float f[i[2]]; //Illegal
    
    C中const的意思是“一个不能被改变的普通变量”,总是占用存储空间且是全局符,所以const Int bufsize = 100; char buf[bufsize]在c中是错误的。C中默认为外部连接。C++中是否为const常量创建内存空间取决于对它如何使用。所以C++要求一个const定义必须初始化,初始化把定义和声明区分开来(在c中,它总是定义,所以初始化不是必须的)。所以c中const不是很有用,必须使用#define
  12. 不能把const对象地址赋给非const指针,但是总可以用类型转换强制这样做(这就是c++,给程序员足够的权限)。临时量自动为const
  13. 类里的const回到了C中的含义:在这个对象生命周期类不能改变。每个对象可以含有不同的初值,所以在一个类中建立一个普通的(非static)的const时,不能给它初值,必须在构造函数初始化列表中初始化。类的编译时常量定义为static const,必须在定义的时候初始化。不支持static const的时候使用的是无标记的enum,一个美剧在编译期间必须有值
  14. const成员函数表明这个函数不会修改对象的数据成员,可以被const对象调用。const函数必须在定义和申明的时候重复出现
  15. C++给程序员绝对的控制,那么如何改变const数据呢? 按位const和按逻辑const……sigh\(^o^)/~哈哈,mutable
  16. volatile关键字告诉编译器不要擅自假设和优化,用于多线程
  17. 内联函数:预处理器的缺陷:宏定义和函数还是有区别的,即使在宏中用()把变量括起来,还是会出现错误,比如调用FUN(i++)这种;另外宏中没有办法表示类的范围。两种限制不能执行内联:函数太复杂;显示或隐式的去函数地址。内联函数没有向前引用问题,因为C++规定只有在类申明结束后其中的内联函数才会被计算
  18. 全局对象在main函数之前初始化,在main退出后销毁
  19. c++中的静态成员初始化必须在类的外部,不能内联,只能定义一次。
  20. 静态初始化的相依性
  21. 替代连接说明:如果c++中要用到c的库,extern ”C" float f(int a, int b);或者多个extern "C" {float f(int a, int b); double d();}或者 extern “C"{#include "Myheader.h" }
        • 0
          点赞
        • 0
          收藏
          觉得还不错? 一键收藏
        • 0
          评论

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

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

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

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

        抵扣说明:

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

        余额充值