考虑以下程序(在此处查看现场演示。)
#include <iostream>
#include <type_traits>
int main()
{
struct T{ virtual void foo()=0;};
std::cout<<std::boolalpha;
std::cout<<std::is_array<int[3]>::value<<'\n';
std::cout<<std::is_array<T>::value<<'\n';
std::cout<<std::is_array<T1[2]>::value<<'\n';
std::cout<<std::is_array<T[3]>::value<<'\n'; // why uncommenting this line causes compile time error?
}
我知道不可能创建抽象类的对象。这里 T 是抽象的,所以不可能创建 struct T 的对象。但是考虑以下语句
std::cout<<std::is_array<T[3]>::value<<'\n';
为什么它给我一个错误?该语句仅检查给定类型是否为数组。这是否意味着如果 T 是数组并且静态成员的value
值计算为true
然后将创建对象数组?但是,为什么这里需要创建数组呢?如果我无法使用该数组,需要创建一个数组吗?这不就是浪费内存吗?
那么为什么下面的语句没有给出任何编译器错误呢?
std::cout<<std::is_array<T>::value<<'\n';
我在这里理解错了吗?请帮我。