проверьте это правильно или нет - PullRequest
0 голосов
/ 23 марта 2011

Форма ИСО по стандартному проекту

n3234 говорит:

Two names are the same if
— they are identifier s composed of the same character sequence, or

Согласно этому значению ... Проверьте, правильно ли это или нет

class ABC{};
class abc{};
int ABC(){}
int abc(){}
int main(){
           int abc;
           char ABC;
         }

Является ли эта программа правильной согласно приведенному выше утверждению?

Является ли эта программа APT к этому утверждению? (Что означает это утверждение)

Наконец ... объясните что-нибудь еще ... я ушел?

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Из ИСО / МЭК 14882: 2003 (E) 9.1.2 -

Определение класса вводит имя класса в область его определения и скрывает любой класс, объект, функцию илидругая декларация этого имени во вложенном объеме (3.3).Если имя класса объявлено в области видимости, где объект, функция или перечислитель с тем же именем также объявлены, тогда, когда обе декларации находятся в области видимости, на класс можно ссылаться только с использованием разработанного спецификатора типа (3.4.4).

[Пример:

struct stat { 
   // ...
};

stat gstat;    // use plain stat to 
               // define variable

int stat(struct stat*);   // redeclare stat as function

void f() {
    struct stat* ps; stat(ps);   // struct prefix needed 
                                 // to name struct stat 
                                 // ...
}

- конечный пример]

3.3.7 Сокрытие имени

2 Имя класса (9.1) или имя перечисления (7.2) может быть скрыто по имени объекта, функции или перечислителя, объявленного в той же области видимости.Если имя класса или перечисления и объект, функция или перечислитель объявляются в одной и той же области (в любом порядке) с одинаковым именем, имя класса или перечисления скрывается везде, где видны имя объекта, функции или перечислителя.


С цитатами из стандартов все эти утверждения верны.

class ABC{};
class abc{};   // abc and ABC are two different character sequences for the 
               // class entity. And similar is the case for next two function
               // entities.

int ABC(){} 
int abc(){}

int main(){      
    int abc;   // abc and ABC are two different character sequences.
    char ABC;
}

Наконец ... объясните что-нибудь еще ... я ушел?

Обе функции ABC(), abc() должны возвращать int, чего они не делают:)

2 голосов
/ 23 марта 2011

C ++ поддерживает прописные и строчные буквы, поэтому да, приведенное выше соответствует.

Существует разница между ABC и abc - они совершенно разные идентификаторы. Однако использование этого различия для создания уникальных идентификаторов в реальном мире не рекомендуется, поскольку оно практически гарантирует, что вы в какой-то момент их перепутаете.

Обратите внимание, что

int abc();
int abc();

незаконно, но

int abc();
int ABC();

нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...