c++ - 在衰减方面是否对布尔数组进行了不同的处理?
问题描述
考虑一个例子,我想创建一个数组数组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}, {a2}, {a3}};
}
现在,代码停止在任何这些编译器上编译,错误类似于:
error: invalid conversion from 'int*' to 'int' [-fpermissive] type block_types[3] = { {a1}, {a2}, {a3}}; ^
注意:这个确切的错误消息来自 GCC 8.1。
这是为什么?为什么bool[]
s 的处理方式与int[]
s 不同?这背后的原因是什么?
解决方案
首先,block_types 是一个由三个数组组成的一个布尔值数组。初始化程序中的每个内部块都需要提供一个布尔值。您已经为每个指针指定了一个指针,指针将转换为 bool。
第二种,block_types 是一个整数的三个数组的数组,你的初始化器的每个内部块都需要提供一个整数值。您再次给出了指针,它们不会转换为整数。
所以,不:数组按照相同的规则衰减,但结果指针转换区分了示例。
推荐阅读
- python - raise 和 except 和有什么不一样?
- python - 在 Python 中按值拆分列表
- javascript - 在查询字符串中传递 '+'
- swift - 核心数据插入具有多重关系的一对多
- firebase - Firebase 云功能:我可以在 Firebase 云功能中启动实时音频流吗?
- php - 如何将一维数组转换为嵌套数组
- ?
- java - 如何通过自定义 Web 应用程序连接到 Alfresco 文档
- c# - 如何解决两次插入数据的问题
- javascript - 使用 Post 发送表单数据,同时告诉服务器不要发送响应
- xcode - Xcode 预览恢复按钮快捷方式