我知道至少有一个C++ 11中的更改会导致一些旧代码停止编译:explicit operator bool()在标准库中引入,替换旧的实例operator void*().当然,这将破坏的代码可能是首先不应该有效的代码,但它仍然是一个重大变化:过去不再有效的程序.
还有其他重大变化吗?
我在Mac OSX Mountain Lion上使用http://hpc.sourceforge.net上的gcc 4.8.1 .我正在尝试编译一个使用该to_string函数的C++程序<string>.我-std=c++11每次都需要使用旗帜:
g++ -std=c++11 -o testcode1 code1.cpp
Run Code Online (Sandbox Code Playgroud)
有没有办法默认包含这个标志?
在不破坏现有编译器的情况下,在Ubuntu 11.04上获取最新C++ 11编译器的最简单方法是什么.我更喜欢预先构建的包而不是自己编译整个工具链.
我使用的是ubuntu 12.04,默认的gcc是4.6.3.它不接受c ++ 11命令,并给我输出说该命令不兼容c ++ 98.我在网上查看并看到有人建议不要在操作系统上更改默认编译器,因为它变得不稳定.任何人都可以建议修复或安全地下载符合c ++ 11的gcc编译器.
我知道默认情况下不应该启用编程语言的实验性功能,所以我欢迎使用标志-std=c++0x和-std=c++1y.但是,C++ 11现在已经成为标准.为什么编译器仍需要-std=c++11启用对其功能的支持?
我正在尝试使用libtins库来嗅探我的网络流量.所以我下载了tar.gz库,并成功完成了手册中提到的所有库编译步骤.
现在,我正在尝试编译我的第一个示例程序:
1 #include <iostream>
2 #include <tins/tins.h>
3
4 using namespace Tins;
5
6 bool callback(const PDU &pdu) {
7 const IP &ip = pdu.rfind_pdu<IP>(); // Find the IP layer
8 const TCP &tcp = pdu.rfind_pdu<TCP>(); // Find the TCP layer
9 std::cout << ip.src_addr() << ':' << tcp.sport() << " -> "
10 << ip.dst_addr() << ':' << tcp.dport() << std::endl;
11 return true;
12 }
13
14 int main() {
15 Sniffer("eth0").sniff_loop(callback);
16 …Run Code Online (Sandbox Code Playgroud)