向量<int> += 1,1,2,2,2,3,4,5,6; 怎么可能?

How is vector<int> += 1,1,2,2,2,3,4,5,6; possible?

本文关键字:怎么可能 int 向量 lt gt      更新时间:2023-10-16

我在boost文档中发现了这种奇怪的语法。

std::vector<int> input;
input += 1,1,2,2,2,3,4,5,6; // <--- How is this possible?

这只是Boost.Assignment库。它使用operator+=operator,重载来简化容器的分配。

语法分解可以由运算符优先级表给出。

从本质上讲,input += 1将返回一个重载了operator,的代理对象,该代理对象将执行大致等效于以下内容的顺序插入:

auto x = (input += 1); // input.push_back(1);
x,2; // input.push_back(2);
x,3; // input.push_back(3);

这要追溯到C++98中,当时他们没有std::initializer_list来直接分配容器的内容,例如std::vector<int> x = { 1, 2, 3 };