当前位置:  开发笔记 > 编程语言 > 正文

关于评估is_array模板类的困惑

如何解决《关于评估is_array模板类的困惑》经验,为你挑选了1个好方法。

考虑以下程序(请参阅此处的实时演示.)

#include 
#include 
int main()
{
    struct T{ virtual void foo()=0;};
    std::cout<::value<<'\n';
    std::cout<::value<<'\n';
    std::cout<::value<<'\n';
    std::cout<::value<<'\n'; // why uncommenting this line causes compile time error?
}

我知道创建抽象类的对象是不可能的.这里T是抽象的,因此不可能创建struct T的对象.但请考虑以下语句

std::cout<::value<<'\n';

为什么它会给我一个错误?该语句仅检查给定类型是否为数组.是否意味着如果T是静态成员的阵列&值value的计算结果为true然后对象数组将被创建?但是,为什么需要在这里创建数组呢?什么是创建数组的需要如果我不能使用该数组?这不仅仅是记忆的浪费吗?

那么为什么以下语句不会给出任何编译器错误?

std::cout<::value<<'\n';

我在这里理解错了什么?请帮我.



1> cpplearner..:

N4567§8.3.4数组[dcl.array] p1(强调我的)

在具有表格的声明T DD

D1 [ constant-expressionopt] attribute-speci?er-seqopt

并且声明中标识符的类型T D1是" derived-declarator-type-list T ",然后D 标识符的类型是数组类型; [...] T称为数组元素类型 ; 此类型不应是引用类型,(可能是cv-quali fi ed)类型void,函数类型或抽象类类型.

因此,语言规则只是禁止您创建类型"abstrct类类型".

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有