Много често виждам в програми/примери за C++ използването на именното пространство "std", което представлява стандартната библиотека от функции на C++.
Оказва се, че този код не е част от добрата практика:
BAD
- #include <iostream>
- using namespace std; // avoid this
- int main() {
- cout << "I like pickles." << endl;
- return 0;
- }
Защо? Простото обяснение е, че могат да се появят конфликти когато използваме други библиотеки, които потенциално могат да имат идентични имена като тези на функциите (и не само) в стандартната библиотека.
Например нека имаме 2 библиотеки с имена MyLib и OtherLib.
Да речем в MyLib имаме функцията myFunction(), а в OtherLib функцията otherFunction(). Всичко е OK, спокойно можем да импортираме тези функции и да ги извикваме безпроблемно.
Но един ден се налага да обновим първата библиотека и сега сме с MyLib 2.0, която за нещастие сега също има функция, която се казва otherFunction(). Лошо! Сега, когато извикаме otherFunction() в кода си, не е ясно кой код точно ще се изпълни. Може да ни се размине ако функциите са с различни параметри, но наистина не си струва рискът.
Решението e много просто и има потенциал да ни спести много главоболия. Ако се върнем към първоначалния пример със "std", единствената промяна, която е нужна, е да назовем името на съответното именно пространство. Тоест:
GOOD
- #include <iostream>
- int main() {
- std::cout << "I like pickles." << std::endl;
- return 0;
- }
"Но това е толкова досадно, всеки път трябва да назовавам именното пространство!" - няма проблем, защото има и алтернатива:
ALSO GOOD
- #include <iostream>
- using std::cout;
- using std::endl;
- int main() {
- cout << "I like pickles." << endl;
- return 0;
- }
Аналогично може да приложите горния код за std::string или структури като std::vector, std::list и т.н. Изключително дребна промяна, която не коства нищо, а носи огромна полза.
Няма коментари:
Публикуване на коментар