【发布时间】:2015-12-23 13:46:23
【问题描述】:
考虑以下程序(查看现场演示here.)
#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';
我在这里理解错了吗?请帮帮我。
【问题讨论】:
标签: c++ object abstract-class evaluation class-template