【发布时间】:2016-02-14 22:57:15
【问题描述】:
A)这行得通:
int main() {
int * a = new int[5];
delete[] a;
return 0;
}
B)这个错误出来了:
int main() {
int * a = new typeof(*a)[5];
delete[] a;
return 0;
}
错误:数组下标的无效类型“int[int]”
C)这行得通:
int main() {
int * a = new typeof(a)[5];
delete[] a;
return 0;
}
我不明白为什么 B 会失败,因为扩展后的语句应该是这样的:
int *a = new int[5];
因为typeof(*a) 是整数。
下面是 decltype 的实验:
D) 这不起作用:
int main() {
int * a = new decltype(a)[5];
delete[] a;
return 0;
}
出现错误:无法在初始化中将“int**”转换为“int*”。鉴于 decltype(a) 是 int* ,因此这是意料之中的,因此它转换为不正确的 int *a = new int*[5];。
E) 但这不起作用:
int main() {
int * a = new decltype(*a)[5];
delete[] a;
return 0;
}
出现错误:new 不能应用于引用类型
因此,无论是 GCC 扩展还是标准 C++11 功能,在所有情况下似乎都没有按照我的预期工作。
【问题讨论】:
-
c++ 中没有
typeof。如果您使用编译器扩展 - 您显然这样做了 - 然后说明您要询问的编译器。 -
我收到了
error: expected type-specifier before ‘typeof’- 你的意思是写decltype吗? -
@TobySpeight 这是一个 gcc 扩展。
-
@molbdnilo - 啊,所以
-std=gnu++11而不是-std=c++11;谢谢。