【发布时间】:2014-08-05 15:50:30
【问题描述】:
我有一个具有std::vector 类型成员的类。在某些地方,我需要另一个类中该向量的大小。因为该成员是私有的,所以我创建了一个 getter 来返回它。在查看代码时,我想到了一个问题:调用 getter 然后是 size() 更好还是创建一个“size getter”更好?
这是我的课:
class MyClass
{
private:
std::vector< int > m_myVec;
public:
std::vector< int > getMyVec() const { return m_myVec; }
// Shall I create:
// std::size_t getMyVecSize() const { return m_myVec.size(); }
// ... other function
};
在我做的代码的其他部分:
std::size_t sz = myClsObj.getMyVec().size(); // or
if (myClsObj.getMyVec().size() > 5) { /*...*/ }
这样做是一个好习惯,还是我将创建并调用“size getter”?
我需要向量(在代码的其他部分我称为 getter)和它的大小;所以没有必要选择只保留一个吸气剂。
另一个事实是我使用的是 C++11,所以不需要返回 const 引用。
基于C++11:如果我调用myClsObj.getMyVec().size(),不返回向量而是返回它的大小是不是很聪明?
【问题讨论】:
-
我个人会使用vector getter,但是让它返回一个引用以避免复制。
-
你喜欢复制向量以获得它们的大小然后扔掉副本吗?您认为这种活动是否让您来之不易的 gigaflops 得到了充分利用?也许复制宇宙以计算此评论副本中的字符数是一个好的设计决策?
-
@Fsmv 对此表示强烈反对。
-
@Fsmv 指的是返回一个局部变量,而不是类成员。
-
@Fsmv 即使那是正确的,“编译器非常聪明,它会弥补我的愚蠢”也不能成为违反基本编码实践的借口。