![](/img/trans.png)
[英]Narrowing Conversion from int to char inside { } | An issue with signedness of char
[英]How to remove narrowing conversion from int to char inside initializer list without casting every argument?
這是我嘗試做的:(與std::vector<int>
)
char s = 4;
std::vector<int> i;
std::vector<char> c;
i.insert(i.end(),{s+1,s+2,s+3}); // no warnings
c.insert(c.end(),{s+1,s+2,s+3}); // narrowing conversions of {s+1,s+2,s+3} from ints to chars
我知道我可以施展,但這很快就會變得丑陋。 (尤其是有更多的論點)
c.insert(c.end(),{(char)(s+1),(char)(s+2),(char)(s+3),(char)(s+4),(char)(s+5),(char)(s+6)});
我們必須忍受這個嗎? 或者,還有更好的方法?
在initializer_list
縮小轉換是一個問題。 請參閱警告的答案:縮小轉換 C++11 。
您可以使用輔助函數來解決該問題。
namespace MyApp
{
char next(char c, int n) { return c+n; }
}
並將其用作
c.insert(c.end(), {MyApp::next(s, 1), MyApp::next(s, 2), MyApp::next(s, 3)});
如果您的列表是常規列表,則可以使用循環代替
for (int i = 1; i <= 3; ++1)
{
c.insert(c.end(), s + i);
}
如果它不正常,您可以構建一個std::initializer_list
,然后使用insert
的范圍重載插入到向量中,如
{
auto elems = {s+1,s+2,s+3};
c.insert(c.end(), elems.begin(), elems.end());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.