向量<int> += 1,1,2,2,2,3,4,5,6; 怎么可能?
How is vector<int> += 1,1,2,2,2,3,4,5,6; possible?
我在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 };
。
相关文章:
- 头文件可以在主类中运行.这怎么可能?
- 怎么可能只让设备使用 pjsua2 捕获或播放
- std::lock_guard 怎么可能比 std::mutex::lock() 更快?
- 怎么可能写 f( *this, std::forward<Args>(args)... ) 而 f 只用 F f 声明;
- 在QT C++编辑Qtable模型数据时,我需要得到一个小盒子,我需要显示编辑文本,这怎么可能?
- 在给定相同的输入的情况下,某些代码怎么可能花费更多时间来运行,这似乎只是因为它处于循环中?
- 答案怎么可能是433?
- 八进制文字怎么可能是负数?
- 我们可以在整数类型的双指针中分配2D整数数组的地址吗?怎么可能
- 我怎么可能从尚未定义某些成员方法的类创建实例?(C++)
- 使用 stl 迭代器封装向量是否很好?如果是?怎么可能呢?
- 几个比较怎么可能比一些计算慢
- 我的 Cuda 矢量怎么可能在填充后是空的
- 怎么可能有两个同名的变量——一个是全局变量,另一个是局部变量
- 奇怪的交叉播.这怎么可能
- 一个变量怎么可能既是constexpr又不是constexpr
- 如果方法私有,是否可以从 main 调用该方法?如果不是,怎么可能
- ANSI到Unicode或向后转换:怎么可能?
- std::unique_ptr怎么可能没有大小开销
- 向量<int> += 1,1,2,2,2,3,4,5,6; 怎么可能?