【问题标题】:Is it a bad practice to use the name of a type for a member function or variable?将类型名称用于成员函数或变量是一种不好的做法吗?
【发布时间】:2010-10-02 08:52:35
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ namespaces naming-conventions naming


    【解决方案1】:

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

    编写了一些编码指南,以防止这种情况发生。通过强制类型以大写字母开头并以小写字母等开头。

    您应该避免根据通用模板名称调用您的成员函数。以下程序根据当前的 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”,第 11 行:警告:不明确的类成员引用 -- 函数
              模板“A::vector”(在第 6 行声明)优先用于
              类模板“std::vector”(在第 163 行声明
              “stl_vector.h”)
      a.vector(); // 格式错误!
        ^
    

    It has been proposed 摆脱这个。

    【讨论】:

    • 我认为 g++ 接受代码而不给出任何警告。我读了你的一篇文章,你在其中发布了一个类似的例子。找不到那个帖子。
    • 谢谢,我得到了答案 :) 那么我应该继续练习。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 2011-12-21
    • 2011-03-28
    • 2019-03-01
    相关资源
    最近更新 更多