У меня есть концептуальный вопрос, который поможет мне как начинающему программисту на C++. В чем преимущество, если таковое имеется, на C++, позволяющем смешивать или «смешивать» объявления и исполняемые файлы? Как я начинаю, все, о чем я могу думать, это то, что это не функция, доступная в C. И, очевидно, вы можете комбинировать некоторые строки кода, не имея необходимости объявлять переменные в начале определенной области, но вы можете объявить в самой инструкции. Хотел бы я рассказать вам все, но я действительно не знаю. Может быть, толчок в правильном направлении поможет! Благодаря!C++ смешение объявлений переменных и исполняемых файлов advtantage
ответ
Это ТРЕБУЕТСЯ в случаях, когда вам нужно взять ссылку на результат функции.
SomeType& func();
....
...
... Some code that is needed to make `func` work, for example
... opening a file or initializing some global variables.
SomeType& x = func();
...
Это не работает, чтобы объявить x
в начале блока, как С предварительно С99 требует в данном случае, так как ссылки не могут быть объявлены без инициализации referant в качестве ссылки.
Другое дело, что вы можете избежать «по умолчанию построения», а затем инициализирует переменную, которая является такой же:
SomeType x(func());
бы избежать вызова конструктора по умолчанию SomeType
.
Но, как правило, компилятор позаботится о том, чтобы удалить ненужные конструкторы, поэтому вопрос гораздо меньше, чем в первом случае.
Главное преимущество - сделать код более удобным для чтения - вместо того, чтобы иметь оператор, такой как myVar = doSomething(p1, p2, p3);
, и ему нужно прокрутить весь путь до начала области, чтобы вспомнить, что такое myVar
, у вас может быть один, более четкий, один подкладка MyClass myVar = doSomething(p1, p2, p3);
.
И тогда вы можете полностью разрушить его, написав 'auto myVar = doSomething (p1, p2, p3)', потому что вам слишком ленив, чтобы использовать систему типов :( –
Здесь по крайней мере три преимущества/преимущества. не
нет неинициализированных/по умолчанию инициализируются значений и лучше обзорного
int a = -1;
int b;
... // Use of `a` is meaningless here, use of `b` is also dangerous
a = f(); b = g();
против
... // Uses of `a` and `b` are compiler errors
int a = f(), b = g();
более эффективного создания объекта
Object o; // default ctor
...
o = Object(1, 2, 'a'); // ctor + move-assignement operator
против
...
Object o(1, 2, 'a'); // ctor
RAII
mtx.lock();
...
mtx.unlock();
против
{
std::lock_guard<mutex> guard(mtx); // implicit mtx.lock()
...
} // automatically generated mtx.unlock();
- 1. C++ - транспортировка исполняемых файлов
- 2. Редактирование файлов исполняемых файлов
- 3. Перечисление исполняемых файлов в C
- 4. C# - Сохранить значок исполняемых файлов
- 5. Формы форм и переменных объявлений
- 6. Смешение переменных с подписями и без знака
- 7. Поиск ящиков и исполняемых файлов
- 8. Создание исходных исполняемых файлов
- 9. Объединение двух исполняемых файлов
- 10. Несколько объявлений переменных
- 11. получение объявлений переменных
- 12. Упаковка или выполнение исполняемых файлов в C++
- 13. Xcode Именование исполняемых файлов
- 14. Запуск исполняемых файлов iOS
- 15. CDN для исполняемых файлов
- 16. Список исполняемых файлов
- 17. Позиция независимых исполняемых файлов и Android Lollipop
- 18. Создание автоматически исполняемых файлов?
- 19. Несколько исполняемых файлов Bluemix
- 20. Синтаксис для запуска исполняемых файлов?
- 21. C# SetParent и Modal для разных исполняемых файлов
- 22. Создание небольших исполняемых файлов haskell?
- 23. вызов предварительно скомпилированных исполняемых файлов
- 24. Выполнять сразу несколько исполняемых файлов
- 25. Компиляция исполняемых файлов по требованию
- 26. libcurl и curl_global_init() для нескольких исполняемых файлов
- 27. Несколько графических процессоров и несколько исполняемых файлов
- 28. IDA Pro и редактирование исполняемых файлов
- 29. xcode запустить и отладить несколько исполняемых файлов
- 30. C несколько однострочных объявлений
Я не понимаю. Под «исполняемыми файлами» вы на самом деле означаете не декларативные заявления? Вы спрашиваете, почему C++ позволяет нам объявлять переменные в точках, отличных от вершины функции? –
FWIW, C99 удалил это ограничение от C. Это было 16 лет назад. –
http://stackoverflow.com/q/4075246/560648 –