【发布时间】:2022-06-10 23:50:46
【问题描述】:
在以下代码中:
#include <iostream>
#include <vector>
int main()
{
std::cout<<"Hello World";
std::vector<std::vector<int>> v;
while(v.size() <= 2){
v.insert(v.begin(),{}); //1
std::cout << "!";
}
return 0;
}
每次迭代的输出都变得越来越激进,因为尽管insert 操作,v.size() 从未增加。
但是,当initializer_list 中有一个元素,或者替换为一个临时元素时,循环运行的次数与预期的一样多。
...
v.insert(v.begin(),{0}); //1
...
...
v.insert(v.begin(),std::vector<int>()); //1
...
这是为什么呢?如果隐式转换失败,不应该出现编译错误吗?
【问题讨论】:
-
没有“隐式强制转换”之类的东西。强制转换是您在源代码中编写的内容,用于告诉编译器进行转换。所以 cast 总是显式的。 转换可以是隐式的。
-
谢谢!我用那个更新了 Q