我试图了解gcc-4.3.2和。的警告差异 GCC-4.5.1。
鉴于
struct S { };
int main() {
int** i;
i = new int*[10] ; delete[] i; // [1a]
i = new (int*[10]); delete[] i; // [1b]
S** s;
s = new S*[10]; // [2a] fine
s = new (S*[10]); // [2b] warning: lambda expressions only available with -std=c++0x or -std=gnu++0x
}
我了解[1a]
和[2a]
正确初始化动态数组
指针未初始化的指针。
我们的代码库中有[2b]
的实例,其中有人真正需要
[2a]
。随着gcc-4.5.1 [2b]
中更好的C ++ 0x支持突然触发a
警告。
我的问题是,[2b]
在C ++ 0x中实际会做什么?什么是
差异为[1b]
,在gcc-4.5.1中看起来不错?是[2b]
做了
gcc-4.3.2和C ++ 03是否正确?
PS。我知道STL容器。
答案 0 :(得分:2)
警告是一个错误:表达式不能被误认为是lambda表达式;它会用--std = c ++ 0x定义来做同样的事情。
另见
我用gcc v 4.3,4.4,4.5和4.6进行了测试。只有4.5给出了流氓警告,4.6愉快地编译代码而没有投诉。
编辑:测试的确切版本
更新我刚刚证明4.5.1编译器(以及所有其他版本)的编译输出完全相同,无论您是否指定--std=c++0x
执行命令行
g++ -o 5-0x.s --std=c++0x -S test.cpp
g++ -o 5.s -S test.cpp
比较5-0x.s
和5.s
显示没有任何区别。