Почему строковая строка разрешена, а int int не разрешена компилятором?

Я просто пытаюсь проверить, разрешает ли компилятор имя типа в качестве имени переменной. Когда я пытался

int int;

, он сообщал об ошибке, говоря

ошибка C2632: «int», за которым следует «int», является недопустимым

, но когда я пытался

#include <string>
using namespace std;

int main()
{
    string string;
}

, он не выдавал никакой ошибки. string и int являются типами данных.

Почему компилятор допускает string и не допускает int ?

EDIT : включает в себя обновление.

РЕДАКТИРОВАТЬ: Некоторые люди говорят, что int это не класс. В этом случае, почему допускается нижняя строка.

int a(10);

он работает аналогично конструктору класса.

9
задан Bill the Lizard 17 September 2012 в 13:24
поделиться

7 ответов

string не является зарезервированным словом C++ , но int им является, и зарезервированное слово не может использоваться в качестве идентификатора.

И синтаксически нормально, чтобы имя класса и имя объекта совпадали.

class test {}; 
int main() { 
        test test; // test is an object of type test.
} 
22
ответ дан 4 December 2019 в 07:04
поделиться

int является ключевым словом C++. Во втором объявлении 'string string' объявляется объект типа 'std::string'. После этого имя 'string' скрывает 'std::string' в неквалифицированном поиске

#include <string>
using std::string;

int main(){
    string string;

    string s;  // Error
}
6
ответ дан 4 December 2019 в 07:04
поделиться

int является ключевым словом, тогда как string является именем класса в стандартной библиотеке, но не является ключевым словом.

3
ответ дан 4 December 2019 в 07:04
поделиться

Попробуйте удалить

#include <string>
0
ответ дан 4 December 2019 в 07:04
поделиться

string на самом деле не является «типом данных» в том же смысле, что и int. int является «собственным типом», поэтому текст «int» является ключевым словом.

string - это просто "определяемый пользователем" класс (хотя здесь "пользователь" определен комитетом по стандартам C++). Но как таковая "строка" не ключевое слово.

Итак, int int — это два ключевых слова вместе, а string string просто определяет переменную с именем «string» типа «string». Компилятор C++ может сохранить два отдельных использования "string" прямо (но это не очень хорошая идея, поскольку, как вы продемонстрировали, программисты часто не могут).

1
ответ дан 4 December 2019 в 07:04
поделиться

Ну, учитывая, что другие по существу опубликовали ответ, я собираюсь опубликовать то, что я имел в виду...

Я предполагаю, что, поскольку второй ответ компилируется, что у вас использование пространства имен std; в вашем файле (что в целом не очень хорошая идея; я не понимаю, почему люди советуют начинающим пользователям C++ делать это).

Когда компилятор переходит к разрешению первой строки, он может найти класс в пространстве имен std. Второе использование string — это просто имя переменной.

0
ответ дан 4 December 2019 в 07:04
поделиться

Компилятор позволяет примитивным типам вести себя как классы для целей шаблонов — если бы вам приходилось везде специализироваться на примитивах, это был бы кошмар.

0
ответ дан 4 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: