《 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
1
jones2000 339 天前
string 和 char* 本质都一样的, 就相当于把 char*里面的内容拷贝到 string 里面。
|
2
sanbuks 338 天前
参考《 C++标准库》 p407, 你可以理解为 可由目标对象构造的类型;
底层应该是在未初始化的内存上调用 std::allocator<T>::construct 通过参数构造对象. ps: 第九章可以直接跳过, 后面不会的可以作为手册参考, 这章精读我觉得意义不大... |
3
huzhikuizainali OP @sanbuks 谢谢回复。请问你说的是第几版 P407 ?可否提供一下 ISBN 号
|
4
sanbuks 338 天前
C++标准库 第二版 中文版
|