我有以下“test.cpp”文件:

#include <cstdint>

struct Struct
{
    int16_t val;
};

int main()
{
        int16_t a = 0;
        //Struct b = {.val = a}; // No warning
        Struct b = {.val = a-1}; // Warning
        (void)b;
        return 0;
}

使用'g++ -std = c++ 11 -o test test.cpp'进行编译时,出现以下警告:
test.cpp: In function ‘int main()’:
test.cpp:12:29: warning: narrowing conversion of ‘(((int)a) + -1)’ from ‘int’ to ‘int16_t {aka short int}’ inside { } [-Wnarrowing]
         Struct b = {.val = a-1};
                             ^

有办法摆脱它吗?

最佳答案

减1时a的类型提升为int
您可以通过在整个表达式上执行static_cast来解决此问题:

    Struct b = { .val = static_cast<int16_t>(a - 1) };

请注意,如果使用普通的int类型完成某些平台(例如x86)的算术运算,可能会更快。

关于c++ - 在{}中将 ‘(((int)a) + -1)’从 ‘int’转换为 ‘int16_t {aka short int}’,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54770370/

10-12 20:44