DEV Community

Димитър Трифонов (dvt32)
Димитър Трифонов (dvt32)

Posted on • Edited on • Originally published at Medium

CODE TIPS #2 — Stop “using namespace std;” (C++)

(Първо публикувано на 11.03.2016)

Много често виждам в програми/примери за C++ използването на именното пространство “std”, което представлява стандартната библиотека от функции на C++.

Оказва се, че този код не е част от добрата практика:

BAD:

Защо? Простото обяснение е, че могат да се появят конфликти когато използваме други библиотеки, които потенциално могат да имат идентични имена като тези на функциите (и не само) в стандартната библиотека.

Program in A++, not C++

Например нека имаме 2 библиотеки с имена MyLib и OtherLib.

Да речем в MyLib имаме функцията myFunction(), а в OtherLib **функцията **otherFunction(). Всичко е OK, спокойно можем да импортираме тези функции и да ги извикваме безпроблемно.

Но един ден се налага да обновим първата библиотека и сега сме с MyLib 2.0, която за нещастие сега също има функция, която се казва otherFunction(). Лошо! Сега, когато извикаме otherFunction() в кода си, не е ясно кой код точно ще се изпълни. Може да ни се размине ако функциите са с различни параметри, но наистина не си струва рискът.

Решението e много просто и има потенциал да ни спести много главоболия. Ако се върнем към първоначалния пример със “std”, единствената промяна, която е нужна, е да назовем името на съответното именно пространство. Тоест:

GOOD:

“Но това е толкова досадно, всеки път трябва да назовавам именното пространство!” — няма проблем, защото има и алтернатива:

ALSO GOOD:

Аналогично може да приложите горния код за std::string или структури като std::vector, std::list и т.н. Изключително дребна промяна, която не коства нищо, а носи огромна полза.

Top comments (0)