gpt4 book ai didi

c++ - 缩小从 int 到 long unsigned int {} 的转换在 C++11 中格式错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:59:37 25 4
gpt4 key购买 nike

当我运行以下代码时 - 我收到警告“在 C++11 [-Wnarrowing] 中,{} 中从 int 到 long unsigned int 的缩小转换是错误的。我正在使用 GNU 4.8 编译器。

typedef struct TableEntry
{
unsigned long value;
const char *label;
} TableEntry;

enum FunctionType
{
NORMAL = 0,
RANGE = 1
};


TableEntry functionTypes[] =
{
{NORMAL, "NORMAL"},
{RANGE, "RANGE"}
};

我不明白为什么编译器将枚举视为整数?
这是 GCC 4.8 中的错误吗?有什么解决方法吗?任何帮助表示赞赏。

最佳答案

如果可行的话:

enum FunctionType
{
NORMAL = 0,
RANGE = 1
};

typedef struct TableEntry
{
FunctionType value;
const char *label;
} TableEntry;


TableEntry functionTypes[] =
{
{NORMAL, "NORMAL"},
{RANGE, "RANGE"}
};

否则,将结构中的类型更改为 int,或者显式地将枚举基于与结构中相同的类型。

顺便说一句,我认为 g++ 警告是没有根据的和错误的,因为原始代码是有效的 C++03。 更正: 据我现在的理解,诊断是正确的,这是 C++11 中的重大变化。我简直不敢相信。


关于命名约定:那些全部大写的标识符对 Java 程序员(习惯了该约定)是有益的,但在 C++ 中,它们增加了无意文本替换的机会。还有审美方面的考虑。为宏保留所有大写字母大获成功。

关于c++ - 缩小从 int 到 long unsigned int {} 的转换在 C++11 中格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21715696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com