Tre*_*key 0 c++ undefined-behavior language-lawyer c++11
C++ 11为语言的核心方面带来了新的关键词和新的变化.
那么可以在C++ 11和pre-C++ 11中成功编译同一段代码,但是从每个二进制文件中得到不同的结果吗?通过 pre-C++ 11,我指的是C++ 98,C++ 03或C++ TR1.
我问的原因是因为我有一堆小程序都是用C++编写的.我不知道每个编写的程序都考虑了什么标准.如果它们都在C++ 11和早期标准中编译,那么这些程序的行为是否保证是相同的?我想在C++ 11中编译它们(如果它们可以),但是如果考虑到早期标准,可以避免任何可能导致程序行为不同的细微变化.
非常感谢工作范例.
克里斯指出,这是这个问题的重复.但是我没有在这个问题的答案中看到以下内容:
#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)
不会编译.我认为这个案例足以激励破产.
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |