OJ上 编译器 G++和C++的区别

本文探讨了C++中编译器优化的不同表现,例如前缀与后缀自增运算符的区别,并讨论了long long及double等数据类型的精度缺省情况。此外,还介绍了在不同场景下如何正确地使用这些数据类型。

原文 :http://blog.youkuaiyun.com/febr2/article/details/52068357

 

编译时的差异:

  • 编译器优化不同:

    举个栗子: ①: a++ ②: ++a

    从标准C的角度看:①式是先调用,再自增。在调用过程中,会申请一个新的数据地址,用于存放临时的变量a’,然后在把a’加1,之后在把a’赋值给a。但是②式不会这么麻烦,因为它是先自增,后调用,也就省去了申请新地址的功夫。所以理论上,二者的时间消耗是有差异的。

    而如果是使用GCC来编译,那么这两者基本上没有差异。

  • 精度缺省:

    ①long long类型,作为一个在C/C++11才被确认为基本数据类型的一个数据类型,在不同的环境下,他的类型标识符是不同的。也就是我们津津乐道的%lld 和 %I64d了。

    ②double类型也是一个有趣的类型。double类型其实准确地说是双精度型,他的内存长度一般是比float类型(单精度型)的多了一倍,有的时候很早的标准里是把double称为long float的。所以说就有了为什么float类型用%f,double用%lf。

    在用scanf读数据时,为了与float区分,使用%lf。

    在用printf写数据时,由于实质上,double和float是同一个类型,只不过内存占用有差异而已,他们的标识符都是%f,注意,这个和标准C不同,这里的都是%f。

  • double numG++提交C++提交最安全的方法
    输入scanf(“%lf”, &num);scanf(“%lf”, &num);cin >> num;
    输出printf(“%f”, num);printf(“%lf”, num);cout << num;
  •  这里写图片描述

转载于:https://www.cnblogs.com/Draymonder/p/7253076.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值