OJ上 编译器 G++和C++的区别
2018-02-09 17:59
253 查看
原文 :http://blog.csdn.net/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。
编译时的差异:
编译器优化不同:
举个栗子: ①: 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 num | G++提交 | C++提交 | 最安全的方法 |
---|---|---|---|
输入 | scanf(“%lf”, &num); | scanf(“%lf”, &num); | cin >> num; |
输出 | printf(“%f”, num); | printf(“%lf”, num); | cout << num; |
相关文章推荐
- 不同的编译器:GCC G++ C C++的区别
- 不同的编译器:GCC G++ C C++的区别
- OJ中的语言选项里G++ 与 C++的区别
- OJ提交题目中的语言选项里G++与C++的区别(转载)
- OJ提交时G++、C++的区别(转)
- OJ提交题目中的语言选项里G++与C++的区别
- OJ提交题目中的语言选项里G++与C++的区别
- oj 中G++和C++区别
- OJ提交题目中的语言选项里G++与C++的区别
- oj 中G++和C++区别
- oj 中的 G++ 与 C++ 的区别
- OJ中C++与G++提交时的区别
- oj 中的 G++ 与 C++ 的区别
- oj 中G++和C++区别
- oj 中G++和C++区别(转)
- OJ提交题目中的语言选项里G++与C++的区别
- OJ提交题目中的语言选项里G++与C++的区别
- OJ提交题目中的语言选项里G++与C++的区别(转)
- oj 中G++和C++区别
- OJ上 G++ 与 C++ 的区别