|
|
||
1. Конфликт имен в C++ |
||
Допустим, что вам нужно съездить к дальним родственникам в другой город. У вас есть только их адрес: г. Ростов, ул. Вербовая, 13. Попав в город Ростов, вы открываете Яндекс.Карты и видите, что есть две улицы с названием Вербовая, еще и в противоположных концах города! Какая из них нужна вам? Если у вас нет никакой дополнительной информации (например, вы знаете, что их дом находится возле аптеки или школы), вам придется позвонить им и спросить. Чтобы подобной путаницы не возникало, все названия улиц в городе должны быть уникальными. Аналогично и в языке C++ все идентификаторы (имена переменных/функций/классов и т.д.) должны быть уникальными. Если в вашей программе находятся два одинаковых идентификатора, то будьте уверены, что ваша программа не скомпилируется: вы получите ошибку конфликта имен. Примеры конфликта имен: а) a.cpp: #include <iostream>
void doSomething(int x)
{
std::cout << x;
}
б) b.cpp: #include <iostream>
void doSomething(int x)
{
std::cout << x * 2;
}
в) main.cpp: void doSomething(int x); // предварительное объявление функции doSomething()
int main()
{
doSomething(5);
return 0;
}
По отдельности файлы a.cpp, b.cpp и main.cpp скомпилируются. Однако, если a.cpp и b.cpp разместить в одном проекте — произойдет конфликт имен, так как определение функции doSomething() находится сразу в обоих файлах. Большинство конфликтов имен происходят в двух случаях: Файлы, добавленные в один проект, имеют функцию (или глобальную переменную) с одинаковыми именами (ошибка на этапе линковки). Файл .cpp подключает заголовочный файл, в котором идентификатор конфликтует с идентификатором из файла .cpp (ошибка на этапе компиляции). Как только программы становятся больше, то и идентификаторов используется больше. Следовательно, вероятность возникновения конфликта имен значительно возрастает. Хорошая новость заключается в том, что язык C++ предоставляет достаточно механизмов для предотвращения возникновения конфликтов имен (например, локальная область видимости или пространства имен). |
||
|
||
1 |