Phi*_*Lab 7 c++ visual-studio visual-c++ c++17 msvc14
我目前正在从迁移大型代码库
至
现在,我的测试在奇怪的地方失败了-我的索引超出了崩溃范围,并且行为发生了其他奇怪的变化。进行挖掘时,我注意到以下代码:
#include <iostream>
#include <vector>
int main()
{
std::vector<std::vector<int>> nestedVector;
nestedVector.insert(nestedVector.begin(), {});
std::cout << nestedVector.size() << " elements";
}
Run Code Online (Sandbox Code Playgroud)
在VS2013中生成一个单元素向量,在VS2019中生成一个空向量。
其他插入方式
nestedVector.insert(nestedVector.begin(), std::vector<int>{});
nestedVector.insert(nestedVector.begin(), std::vector<int>());
Run Code Online (Sandbox Code Playgroud)
在这两种设置中均可正常工作,并正确添加新元素。这是怎么回事
正如评论中已经提到的,在您的原始程序中,调用选择nestedVector.insert(nestedVector.begin(), {})了重载方法:
iterator insert( const_iterator pos, std::initializer_list<T> ilist );
Run Code Online (Sandbox Code Playgroud)
请参阅https://en.cppreference.com/w/cpp/container/vector/insert。
由于初始化列表为空,因此没有真正插入任何内容,并且向量大小最后为零。所有编译器中的行为都是相同的,演示: https: //godbolt.org/z/9nnET5ren
显然,VS2013没有实现这个insert方法的重载,所以另一个调用:
iterator insert( const_iterator pos, const T& value );
Run Code Online (Sandbox Code Playgroud)
在向量中创建一个元素。这是错误的行为。
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |