Почему люди делают это в c++ - Вопросы по С+

Вопрос Почему люди делают это в c++

Регистрация
19 Ноя 2013
Сообщения
94
Репутация
0
Спасибо
0
Монет
0
#include <iostream>



int main(){

std::cout << "Hello world";

}



В место:



#include <iostream>

using namespace std;



int main(){

cout << "Hello world";

}
 
Регистрация
26 Ноя 2013
Сообщения
92
Репутация
0
Спасибо
0
Монет
0
Первый вариант более профессиональный. Второй в более-менее больших программах может привести к ошибкам при совпадении имен из разных пространств имен.
 
Регистрация
21 Авг 2013
Сообщения
91
Репутация
-3
Спасибо
1
Монет
0
class A {
};

namespace N {
class A {
};
};

using namespace N;
A obj; // ??? какой именно класс А подразумевается??? А когда вот так: A obj1;
N::A obj2; тут однозначно понятно
 
Регистрация
14 Дек 2013
Сообщения
78
Репутация
0
Спасибо
0
Монет
0
Неймспейсы придумали не для того, чтобы не пользоваться их преимуществами.
 
Регистрация
25 Дек 2013
Сообщения
90
Репутация
0
Спасибо
0
Монет
0
Разница между двумя вариантами кода на C++ связана с использованием пространств имён (namespaces). Вот основные причины, почему некоторые программисты предпочитают первый вариант (std::cout) вместо второго (using namespace std):

Явное указание пространства имён (std::)
Преимущества:
Чёткая видимость происхождения функций/объектов:

std::cout << "Hello"; // Ясно, что cout из стандартной библиотеки


Защита от конфликтов имён:

int count = 0;
std::count << "Hello"; // Ошибка, т.к. count уже определён как переменная
Без std:: компилятор может спутать count из библиотеки с вашей переменной.

Лучшая читаемость в больших проектах, где много своих функций и библиотек.

Недостатки:
Длинный код (но это решается с помощью typedef или using для конкретных объектов).

Использование using namespace std
Преимущества:
Удобство (меньше печатать):

cout << "Hello"; // Короче, чем std::cout
Подходит для мелких проектов, где нет риска конфликтов имён.

Недостатки:
Риск конфликтов имён:

using namespace std;
using namespace mylib; // Если в mylib есть свой cout, будет ошибка!
cout << "Hello"; // Какой cout использовать: std или mylib?
Сложнее отлаживать в больших проектах, где много библиотек.

Компромиссные решения
Если не хочется писать std:: перед каждым объектом, но нужно избежать проблем, можно:

Импортировать только нужные имена:

using std::cout;
using std::endl;
cout << "Hello" << endl; // Работает, но не импортирует весь std
Локально использовать using namespace (внутри функции):

int main() {
using namespace std; // Только внутри main()
cout << "Hello";
}
Вывод:
Первый вариант (std::cout) — безопаснее, рекомендуется для больших проектов и профессиональной разработки.

Второй вариант (using namespace std) — удобнее для обучения и маленьких программ.

Что чаще используют?
В индустрии (крупные проекты, Open Source) — явное указание std::.

В учебниках/быстрых скриптах — using namespace std.

Если хотите писать "чистый" и переносимый код — лучше приучаться к первому варианту.
 
Сверху Снизу