push_back 的原理
首先我们都清楚 push_back() 的作用是复制或移动的方式向容器尾部添加给定的元素。函数接口如下面两个形式。
// T为类模板参数
void push_back(const T& value);
void push_back(T&& value);
这里有一段简单的代码,向一个 std::vector<std::string> 添加一个字符串。
#include <string>
#include <vector>
int main() {
std::vector<std::string> arr;
arr.push_back("Hello World");
}
其中 arr.push_back("Hello World"); 的参数是一个字符串字面量。

而向一个 std::vector<std::string> 添加一个字符串字面量,会经过两个步骤:
- 通过字符串字面量构造出一个临时的字符串对象;
- 将临时对象匹配到 void push_back(T&& value); 并移动到数据尾部。
类似于这么一个形式:
arr.push_back(std::string("Hello World")); ---> void push_back(T&& value);