我最近得到了在与该码的对接位:为什么编译器不会对未签名转换签名提出警告?
std::size_t s = 10;
std::vector<int> v{s};
,而不是与一个大小为10初始化,这与初始化尺寸为1与一个元件10
。但是,矢量有一个明确的构造函数,它需要一个std::size_t
。随着所有关于“随处使用大括号”的宣传,我预计很多人都陷入了这个陷阱。如果编译器只是警告我们试图将size_t
变成int
,这可以避免。
为什么不要求编译器要做到这一点?
编辑:我原来的代码有const std::size_t s
。显然没有我使用的编译器警告,除非我删除了const。这是一个错误?
没有信息丢失 – valdo
[未能这里编译](http://coliru.stacked-crooked.com/a/4e2010051a6bc5ff) – NathanOliver
打开警戒线起来,用MSVS2015代码给了我“错误C2398:元素“ 1':从'size_t'转换为'int'需要缩小转换“和”警告C4267:'初始化':从'size_t'转换为'int',可能丢失数据“ – Blastfurnace