c++ - 为什么 std::pair 暴露成员变量?

标签 c++ stl encapsulation

来自 http://www.cplusplus.com/reference/utility/pair/ ,我们知道std::pair有两个成员变量firstsecond

为什么 STL 设计者决定公开两个成员变量,firstsecond,而不是提供 getFirst()getSecond()?

最佳答案

对于原始的 C++03 std::pair,访问成员的函数将没有用处。

从 C++11 和更高版本开始(我们现在是 C++17,C++20 很快就会出现)std::pair 的一个特例std::tuple,其中 std::tuple 可以有任意数量的项目。因此,有一个参数化的 getter 是有意义的,因为发明和标准化任意数量的项目名称是不切实际的。因此您可以使用 std::get也适用于 std::pair

因此,设计的原因是历史性的,即当前的 std::pair 是向更通用化发展的最终结果。


在其他新闻中:

关于

As far as I know, it will be better if encapsulating two member variables above and give a getFirst(); and getSecond()

不,那是垃圾。

这就像说锤子总是更好,无论您是用钉子钉钉子、用螺钉固定还是修剪一 block 木头。尤其是在最后一种情况下,锤子并不是有用的工具。锤子可能非常有用,但这并不意味着它们总体上“更好”:这只是胡说八道。

关于c++ - 为什么 std::pair 暴露成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37835248/

相关文章:

c++ - "no matching function for call to"让我感到困惑

c++ - 将 apiVersion 设置为 VK_VERSION_1_0 时出现 VK_ERROR_INCOMPATIBLE_DRIVER

c++ - 有没有办法强制 gcc 为 block 启动一个新的堆栈帧?

c++ - 声明 vector 时出现段错误

java - 是否需要将私有(private)嵌套类的内部声明为私有(private)?

C# 对象引用未设置为对象的实例。在列表中实例化类?

c++ - 如何使用 range-v3 获取集合的所有权?

c++ - 后增量运算符的评估顺序是什么?

c++ - 二维数组重载

python - Python中的非成员与成员函数