【发布时间】:2011-10-22 10:48:28
【问题描述】:
我试图了解 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 支持突然触发
警告。
我的问题是,[2b] 在 C++0x 中实际上会做什么?什么是
与在 gcc-4.5.1 中看起来很好的[1b] 的区别?是[2b] 在做
用 gcc-4.3.2 和 C++03 做对了吗?
PS。我知道 STL 容器。
【问题讨论】:
-
PPS。欢迎提出更好标题的建议。
-
非常有趣,我不知道你甚至可以写 1b和2b。对我来说,它看起来像是一个不完整的放置语法......这是否有效?
-
@Kerrek:我对标准的模糊理解是
int*[10]命名了一个类型,以便[1b]和[2b]中的括号不添加任何内容。 -
@sehe:谢谢。这很有用。