《 C++ Primer 》 P302
赋值运算符要求左边和右边的运算对象具有相同的类型。它将右边运算对象中所有元素拷贝到左边运算对象中。顺序容器(arra y 除外)还定义了一个名为 assign 的成员,允许我们从一个不同但相容的类型赋值,或者从容器的一个子序列赋值。assign 操作用参数所指定的元素(的拷贝)替换左边容器中的所有元素。例如,我们可以用 assgin 实现将一个 vector 中的一段 char *值赋予一个 list 中的 string :
list<string>names;
vector<const char*>oldstyle;
names=oldstyle;//错误:容器类型不匹配
//正确:可以将 const char *转换为 string
names.assign(oldstyle.cbegin(),oldstyle.cend());
我在网上找到了两个相关说明。不知道哪一个才是上文“相容的类型”的准确描述?
csdn 的描述比较清晰简单: https://blog.csdn.net/qq_66726657/article/details/131076899
cppreference.com 的介绍比较复杂抽象,其中还包含许多陌生概念: https://zh.cppreference.com/w/c/language/types#.E5.85.BC.E5.AE.B9.E7.B1.BB.E5.9E.8B