首页 > 解决方案 > 无后缀的十六进制文字的“缩小转换”警告?

问题描述

static int var[2] __attribute__ ((aligned (8))) =
{
    0x0255cfa8,
    0xfdfcddfc
};

为什么我会收到警告:narrowing conversion of '4261207548u' from 'unsigned int' to 'int' inside { } is ill-formed in C++11 [-Wnarrowing]

即使数字没有u或没有U后缀,它们似乎也被视为无符号?

标签: c++

解决方案


如果int在您的平台上是 32 位,0xfdfcddfc则为unsigned. 那是因为您使用了十六进制表示法。

您有用的编译器警告您该数字对于int.

请注意,如果您编写了 denary 等效项,那么它将是一个signed类型 ( longor long long),并且编译器会发出一个稍微不同的警告。

参考:https ://en.cppreference.com/w/cpp/language/integer_literal#The_type_of_the_literal


推荐阅读