gpt4 book ai didi

c++ - g++ 是否错误地抛出 -Wnarrowing?

转载 作者:行者123 更新时间:2023-12-02 00:26:55 24 4
gpt4 key购买 nike

这是在 C++14 模式下运行的 GCC 7.4:

        size_t i = 8;
std::string strIndent { i, ' ' };

看起来不错,但我收到警告:

AnalyticsDBI.cpp:538:48: warning: narrowing conversion of ‘i’ from ‘size_t {aka long unsigned int}’ to ‘char’ inside { } [-Wnarrowing]
std::string strIndent { i, ' ' };

这是一个编译器错误吗?我不明白编译器如何选择错误的重载。应该是构造函数2,如图here .

最佳答案

使用 clang 编译显示它正在尝试调用 initializer_list<char>构造函数,其中 size_t -> char是缩小转换:

narrowing.cpp:5:26: error: non-constant-expression cannot be narrowed from type 'size_t' (aka 'unsigned long') to 'char' in initializer list [-Wc++11-narrowing]
std::string strIndent { i, ' ' };
^
narrowing.cpp:5:26: note: insert an explicit cast to silence this issue
std::string strIndent { i, ' ' };
^
static_cast<char>( )
1 error generated.

使用 () 代替将调用您想要的构造函数:

 std::string strIndent(i, ' ');

关于c++ - g++ 是否错误地抛出 -Wnarrowing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60557227/

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