对成员函数或变量使用类型名称是不好的做法?

时间:2010-10-02 08:52:36

标签: c++ namespaces naming-conventions naming

如果答案是肯定的,你能告诉我为什么吗?这是一个例子:

namespace urx {
    struct reserved { };
    struct side { urx::reserved reserved() { /*...*/ } };
}

int main() {
    urx::side side;
    side.reserved();
}

reserved用于类型名称和函数名称。 side用于类型名称和变量名称。 但在这两种情况下,它们都由urx命名空间分隔,我总是明确指定urx来引用类型名称(为了便于阅读)。

1 个答案:

答案 0 :(得分:2)

我不明白为什么会这么糟糕。我想我宁愿用好名字命名我的成员函数,而不是发明难以记住的人工名称来消除它们的歧义。

编写了一些编码指南,以便不会发生这种情况。通过强制类型以大写字母开头,并使用小写字母等函数。

您应该避免根据常用模板名称调用您的成员函数。根据当前的C ++标准,以下程序是不正确的,尽管有些编译器倾向于(为了好处)忽略该错误。 Clang和comeau发出警告

#include <vector>
using namespace std;

struct A {
  template<typename T>
  T vector();
};

int main() {
  A a;
  a.vector<int>(); // ill-formed!
}
"ComeauTest.c", line 11: warning: ambiguous class member reference -- function  
          template "A::vector" (declared at line 6) used in preference to  
          class template "std::vector" (declared at line 163 of  
          "stl_vector.h")
  a.vector(); // ill-formed!
    ^

It has been proposed摆脱这个。