Zos*_*oso 5 c++ typeof decltype
A)这有效:
int main() {
int * a = new int[5];
delete[] a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
B)这个错误:
int main() {
int * a = new typeof(*a)[5];
delete[] a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
出现错误:数组下标的类型“int[int]”无效
C)这有效:
int main() {
int * a = new typeof(a)[5];
delete[] a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么 B 失败,因为扩展后的语句应该如下所示:
int *a = new int[5];
Run Code Online (Sandbox Code Playgroud)
因为typeof(*a)是 int。
这是 decltype 的实验:
D)这不起作用:
int main() {
int * a = new decltype(a)[5];
delete[] a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
出现错误:无法在初始化时将 'int**' 转换为 'int*'。这是预期的,因为 decltype(a) 是 int*,因此它转换为int *a = new int*[5];不正确的。
E)但这不起作用:
int main() {
int * a = new decltype(*a)[5];
delete[] a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
出现错误:new 无法应用于引用类型
因此,无论是 GCC 扩展还是标准 C++11 功能,两者似乎都没有在所有情况下都按照我的预期工作。
*a 是一个指向 int 的指针,因此不能以这种方式调用 typeof
int *a = new int[5];
Run Code Online (Sandbox Code Playgroud)
之所以有效,是因为您要显示整数并在 a 显示的位置声明大小为 5 的新数组
也许你想要:
typeof(new typeof(int *)[5])a;
Run Code Online (Sandbox Code Playgroud)
反而
int * a = new typeof(*a)[5];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |