这些编译器之间是否有任何区别
Is there any difference between these compilers?
i在不同环境中运行相同的代码。
第一个是IDE(Visual Studio 2017(。第二个是GCC 4.8.5提供的WebCompiler。
但是,我得到了不同的结果!
这是我运行的示例代码。
#include<iostream>
#include<vector>
#include<algorithm>
class Data
{
public:
int num1;
int num2;
Data(int _num1, int _num2)
{
num1 = _num1;
num2 = _num2;
}
bool operator<(const Data &input) const
{
if (this->num1 < input.num1)return true;
else return false;
}
};
int main()
{
std::vector<Data> vec;
vec.push_back(Data(5, 3));
vec.push_back(Data(6, 0));
vec.push_back(Data(6, 1));
vec.push_back(Data(6, 2));
vec.push_back(Data(6, 4));
vec.push_back(Data(9, 5));
vec.push_back(Data(12, 6));
vec.push_back(Data(14, 7));
vec.push_back(Data(16, 8));
vec.push_back(Data(16, 10));
vec.push_back(Data(18, 9));
vec.push_back(Data(20, 11));
vec.push_back(Data(20, 12));
vec.push_back(Data(21, 14));
vec.push_back(Data(22, 13));
vec.push_back(Data(24, 15));
vec.push_back(Data(25, 18));
vec.push_back(Data(26, 16));
vec.push_back(Data(25, 17));
vec.push_back(Data(28, 19));
vec.push_back(Data(30, 20));
vec.push_back(Data(29, 21));
vec.push_back(Data(31, 23));
vec.push_back(Data(32, 22));
vec.push_back(Data(34, 24));
vec.push_back(Data(34, 26));
vec.push_back(Data(36, 25));
vec.push_back(Data(36, 27));
vec.push_back(Data(38, 28));
vec.push_back(Data(38, 30));
vec.push_back(Data(40, 29));
vec.push_back(Data(41, 32));
vec.push_back(Data(42, 31));
vec.push_back(Data(42, 34));
vec.push_back(Data(44, 33));
vec.push_back(Data(46, 35));
std::sort(vec.begin(), vec.end());
}
当我尝试打印vec的元素时,在IDE的情况下,我得到了结果。
5 3
6 0
6 1
6 2
6 4
9 5
12 6.....
但是使用GCC,我的结果低于结果。
5 3
6 0
6 4
6 2
6 1
9 5
12 6.....
sTD :: stable_sort和std ::在标准C 库中排序,这是有充分理由的。如果两者都相同,则只有一个标准化。
如果您想要稳定的排序,请使用std::stable_sort
。如果您想要快速的排序,请仅使用std::sort
,并为实施留下更多自由。当C 标准允许对它们有所自由时,不要指望不同的编译器会给出完全相同的结果。
请注意,编程语言是规范,用英语编写。花更多的时间来阅读您喜欢的C 标准,例如C 11的N3337。要注意未指定的行为和更危险的不确定行为。
第二个是GCC 4.8.5
请注意, GCC 4.8是一个过时的编译器。当前版本的GCC是自2019年5月以来的GCC9。我强烈建议使用最近的GCC编译器(至少在2019年夏季GCC 8(。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- C++ - "!pointer"和"pointer == nullptr"的区别?
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- 如何在不产生任何垃圾的情况下获得C中的像素
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在if条件下,右或左改变值的相等性检查是否有任何区别
- 这些编译器之间是否有任何区别
- 结构数据D = {0}和结构数据D = {}之间是否存在任何区别
- 编译时,复制构造函数/复制分配和正常功能调用优化之间是否存在任何区别
- 复制列表初始化和传统复制初始化之间的任何区别
- 对于数据成员,如果包含对象已在动态内存中,则动态分配此变量(或不动态分配)之间是否有任何区别
- 将字符串传递给任何函数时 * 和 & 之间的区别?
- 将 delete 作为运算符或函数调用是否有任何区别
- Ubuntu或Windows中的代码块.任何区别
- clock_gettime( CLOCK_REALTIME .. ) 和 time() 之间的任何区别
- ifstream打开由cin命名的文件,但从数组中提取时不打开.cin和常规字符串定义之间的任何区别