加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – bool阵列在衰变方面的处理方式是否不同?

发布时间:2020-12-16 07:24:29 所属栏目:百科 来源:网络整理
导读:考虑一个示例,我想创建一个bool数组数组: int main() { using type = bool[1]; bool a1[1] = {true}; bool a2[1] = {true}; bool a3[1] = {true}; type block_types[3] = {{a1},{a2},{a3}};} 此代码编译为Clang 7.0.0,GCC 8.2和MSVS v19.16. 现在,让我们将b
考虑一个示例,我想创建一个bool数组数组:

int main() {
    using type = bool[1];

    bool a1[1] = {true};
    bool a2[1] = {true};
    bool a3[1] = {true};

    type block_types[3] = {{a1},{a2},{a3}};
}

此代码编译为Clang 7.0.0,GCC 8.2和MSVS v19.16.

现在,让我们将bool更改为int:

int main() {
    using type = int[1];

    int a1[1] = {1};
    int a2[1] = {1};
    int a3[1] = {1};

    type block_types[3] = {{a1},{a3}};
}

现在,代码停止编译任何这些编译器,错误类似于:

06002

注意:此确切错误消息来自GCC 8.1.

这是为什么?为什么bool []的处理方式与int [] s不同?这背后的理由是什么?

解决方法

在第一个中,block_types是一个包含一个布尔值的三个数组的数组.初始化程序中的每个内部块都需要提供一个布尔值.你给了每个指针,指针将转换为bool.

在第二个中,block_types是一个包含一个整数的三个数组的数组,初始化程序的每个内部块都需要提供一个整数值.你再次给出指针,它们不会转换为整数.

所以,不:数组在相同的规则上衰减,但结果指针转换区分了这些例子.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读