为什么C++ 11字符串新函数(stod,stof)不是字符串类的成员函数?

Gre*_*g82 7 c++ non-member-functions c++11

为什么这些C++ 11头的新的功能<string>(stod,stof,stoull)所述的不成员函数string类?

是不是更符合C++ mystring.stod(...)而不是stod(mystring,...)

Mat*_* M. 22

对许多人来说这是一个惊喜,但C++ 不是面向对象的语言(与Java或C#不同).

C++是一种多范式语言,因此尽可能地尝试使用最佳工具.在这种情况下,自由功能是正确的工具.

指南:首选非成员非友元函数到成员函数(来自Efficient C++,Item 23)

原因:成员函数或朋友函数可以访问类内部,而非成员非朋友函数则不能; 因此,使用非成员非友元函数会增加封装.

例外:当成员函数或朋友函数提供显着优势(例如性能)时,尽管有额外的耦合,但值得考虑.例如,即使std::find工作得很好,关联容器例如std::set提供一个std::set::find在O(log N)而不是O(N)中工作的成员函数.

  • @ 0x499602D2:恐怕我根本不遵循你的推理.我从未说过关于getter和setter的任何内容......如果你想实现一个*绝对*需要访问类内部的方法,那么*显然*它将被实现为成员函数或友元函数; 这里没有争论.当您有选择*时,指南适用*,而*通常*您可以选择,您只需要退后一步即可实现.如果不这样做,你就不会. (4认同)
  • 如果该指南刚刚应用于`std :: basic_string` ...... (3认同)