请问究竟什么是 C++中的“相容类型”的含义?

107 天前
 huzhikuizainali

《 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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1010766

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX