C ++ 11 为该语言的核心方面带来了新的关键词和新变化 那么是否有可能在 C ++ 11 和 pre-C ++ 11 中成功编译相同的代码,但是从每个二进制文件中得到不同的结果?通过 pre-C ++ 11 ,我指的是 C ++ 98 , C ++ 03 或 C + + TR1 即可。
我问的原因是因为我有一堆用C ++编写的小程序。我不知道每个编写的程序都考虑了什么标准。如果它们都在 C ++ 11 以及早期标准中编译,那么这些程序的行为是否保证是相同的?我想在 C ++ 11 中编译它们(如果它们可以),但是如果考虑到早期标准,可以避免任何可能导致程序行为不同的微妙变化。
非常感谢工作示例。
答案 0 :(得分:7)
正如克里斯指出的,this是这个问题的副本。但是我没有在这个问题的答案中看到以下内容:
#include <vector>
#include <iostream>
struct X
{
X() {std::cout << "X()\n";}
X(const X&) {std::cout << "X(const X&)\n";}
};
int
main()
{
std::vector<X> v(3);
}
在C ++ 03中输出:
X()
X(const X&)
X(const X&)
X(const X&)
在C ++ 11中输出:
X()
X()
X()
对于几乎所有代码,这都没有区别。但是&#34;几乎&#34;不是&#34;总是&#34;,所以这是一个突破(行为差异)的变化。你可以责怪我这个改变。没有它:
std::vector<std::unique_ptr<int>> v(3);
不会编译。我认为这个案例足以激励破产。