使用auto进行隐式转换时出错。
使用int变量捕获v.size()
的返回是可以的但是自动抱怨。
编译器错误确实告知它是因为转换范围缩小。但我想用内存来理解这是如何发生的以及为什么auto不允许它这样做而正常转换是正常的
#include <iostream>
#include <vector>
int main()
{
auto v = std::vector<int>{ 1, 2, 3 };
auto c = 'h';
auto n2 = int{c};
std::cout<<n2<<" "<<c;
auto size = int{v.size()};
std::cout<<size;
int size_1 = v.size();
std::cout<<size_1;
}
由于下线错误 auto size = int {v.size()};
main.cpp:在函数'int main()'中:main.cpp:11:27:错误:缩小 转换'v.std :: vector :: size()' 'std :: vector :: size_type {aka long unsigned int}'到'int'里面 {} [-Wararrowing]
当评论该行时,它可以完美地运行
#include <iostream>
#include <vector>
int main()
{
auto v = std::vector<int>{ 1, 2, 3 };
auto c = 'h';
auto n2 = int{c};
std::cout<<n2<<" "<<c;
//auto size = int{v.size()};
//std::cout<<size;
int size_1 = v.size();
std::cout<<size_1;
}
输出
104 h3
答案 0 :(得分:4)
这与auto
无关。如果您使用
int size = int{v.size()};
此处的问题是int{v.size()}
正在使用支持初始化来初始化临时int
。 支撑初始化中的缩小转换是导致诊断显示的原因。
请注意
int size_1 = v.size();
也是一个缩小的转换,它不是标准要求发出警告/错误的转换。