在C++ 11和pre-C++ 11中成功编译的代码示例,其行为方式不同

Tre*_*key 0 c++ undefined-behavior language-lawyer c++11

C++ 11为语言的核心方面带来了新的关键词和新的变化.
那么可以在C++ 11pre-C++ 11中成功编译同一段代码,但是从每个二进制文件中得到不同的结果吗?通过 pre-C++ 11,我指的是C++ 98,C++ 03C++ TR1.

我问的原因是因为我有一堆小程序都是用C++编写的.我不知道每个编写的程序都考虑了什么标准.如果它们都在C++ 11和早期标准中编译,那么这些程序的行为是否保证是相同的?我想在C++ 11中编译它们(如果它们可以),但是如果考虑到早期标准,可以避免任何可能导致程序行为不同的细微变化.

非常感谢工作范例.

How*_*ant 7

克里斯指出,是这个问题的重复.但是我没有在这个问题的答案中看到以下内容:

#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);
}
Run Code Online (Sandbox Code Playgroud)

在C++ 03中输出:

X()
X(const X&)
X(const X&)
X(const X&)
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,这输出:

X()
X()
X()
Run Code Online (Sandbox Code Playgroud)

几乎所有代码都没有区别.然而,"几乎"不是"总是",所以这是一个突破(行为差异)的变化.你可以责怪我这个改变.没有它:

std::vector<std::unique_ptr<int>> v(3);
Run Code Online (Sandbox Code Playgroud)

不会编译.我认为这个案例足以激励破产.