Плохо ли использовать имя типа для функции-члена или переменной? - PullRequest
1 голос
/ 02 октября 2010

Если ответ «да», можете ли вы сказать мне, почему? Вот пример:

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

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

reserved используется как для имени типа, так и для имени функции. side используется как для имени типа, так и для имени переменной. но в обоих случаях они разделены пространством имен urx, и я всегда явно указываю urx для ссылки на имя типа (для удобства чтения).

1 Ответ

2 голосов
/ 02 октября 2010

Я не понимаю, почему это было бы плохо.Я думаю, что я предпочел бы называть свои функции-члены в соответствии с хорошими именами, чем придумывать трудно запоминающиеся искусственные имена для их устранения неоднозначности.

Некоторые руководства по кодированию написаны так, что этого не может произойти.Вынуждая типы начинаться с буквы верхнего регистра, а функции - с буквы нижнего регистра и тому подобное.

Вы должны избегать вызова функций-членов в соответствии с общими именами шаблонов.Следующая программа некорректна в соответствии с текущим стандартом 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!
    ^

Было предложено , чтобы избавиться от этого.

...