提问人:sparrow 提问时间:6/5/2023 最后编辑:greybeardsparrow 更新时间:6/5/2023 访问量:63
std::array 无法为特定数据列表自动初始化
std::array couldn't be auto initialized for a certain data list
问:
std::array 无法为特定数据列表自动初始化:
static constexpr auto k_strap4_function_setting = std::array{0xf0000000, 0x70000000}; // compile error
static constexpr auto k_strap4_function_setting = std::array{0xe0000000, 0x70000000}; // compile error
static constexpr auto k_strap4_function_setting = std::array{0xd0000000, 0x70000000}; // compile error
static constexpr auto k_strap4_function_setting = std::array{0xc0000000, 0x70000000}; // compile error
static constexpr auto k_strap4_function_setting = std::array{0xb0000000, 0x70000000}; // compile error
static constexpr auto k_strap4_function_setting = std::array{0xa0000000, 0x70000000}; // compile error
static constexpr auto k_strap4_function_setting = std::array{0x90000000, 0x70000000}; // compile error
static constexpr auto k_strap4_function_setting = std::array{0x80000000, 0x70000000}; // compile error
static constexpr auto k_strap4_function_setting = std::array{0x70000000, 0x70000000}; // good to work
static constexpr auto k_strap4_function_setting = std::array{0x60000000, 0x70000000}; // good to work
static constexpr auto k_strap4_function_setting = std::array{0x50000000, 0x70000000}; // good to work
static constexpr auto k_strap4_function_setting = std::array{0x40000000, 0x70000000}; // good to work
以下是错误日志:
error: no viable constructor or deduction guide for deduction of template arguments of 'array'
static constexpr auto k_strap4_function_setting = std::array{0xf0000000, 0x70000000};
唯一的区别是“编译错误”定义的最高位是“1”。
这个错误有意义吗?
或者是 std::array 的错误。
答:
1赞
user17732522
6/5/2023
#1
不带任何后缀的十六进制整数文本的类型是以下列表中的第一个,能够表示文本的确切值:
int
unsigned int
long
unsigned long
long long
unsigned long long
在宽度为 32 位的系统上,可表示的最大值为 为 ,可表示的最大值为 。所以所有的文字都是有类型的,而那些从有类型。int
int
0x7fffffff
unsigned int
0xffffffff
0x7fffffff
int
0x80000000
0xffffffff
unsigned int
的演绎指南的指定方式是,如果不是初始值设定项的所有元素都具有相同的类型,它将失败。这就是为什么你的一些例子失败了。std::array
显式指定数组的元素类型,例如 而不是 ,以便具有其他类型的初始值设定项将隐式转换为指定的元素类型,或者在文本中添加(或)后缀以强制它们始终仅从上面的列表中选择无符号类型。std::array<unsigned int>
std::array
U
u
评论
0x80000000
是 ,是 。unsigned int
0x70000000
int
0xf000000ul
k_strap4_function_setting