Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
Возникло несколько вопросов по С++. Я новичёк, поэтому и вопросы соответствующие. 1. Есть ли новые изменения в языке, кроме стандартов С++11 и С++14? 2. Зачем нужно метапрограммирование в шаблонах, кроме как для теоретического интереса? 3. Чем отличается файл .hpp от .cpp и .h? 4. Почему С++ до сих пор не превратится в кроссплатформенный и многосистемный, как Java и C#? 5. Чем отличается программирование на C++ для Linux от программирования для Windows? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2015, 22:32 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
Ответы: 1. А их тебе мало?.. 2. Низачем. 3. Обычно .hpp это пре-компилированный заголовок. 4. Превратился и уже давно. 5. Ничем. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2015, 22:37 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov3. Обычно .hpp это пре-компилированный заголовок. Штоа? :) Это просто заголовок, такой же как и .h, только там декларации С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2015, 23:12 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cpp, не скажу, что ответы коллег неправильные, просто хочу подчеркнуть кое-какие аспекты. 1. Есть ли новые изменения в языке, кроме стандартов С++11 и С++14? нет. все изменения в стандарте. 2. Зачем нужно метапрограммирование в шаблонах, кроме как для теоретического интереса? а что ты понимаешь под метапрограммированием ? 3. Чем отличается файл .hpp от .cpp и .h? ничем. ты можешь делать #include файла с абсолютно любым суффиксом. 4. Почему С++ до сих пор не превратится в кроссплатформенный и многосистемный, как Java и C#? он таким всегда был с рожднния. 5. Чем отличается программирование на C++ для Linux от программирования для Windows? на стандартном с++ программирование не отличается ничем. но часто программы используют API операционной системы и графических библиотек для своей работы. Тут дело скорее не в ОС, а в том, какие библиотеки используются. Библиотеки бывают переносимые и специфичные для конкретных ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 07:33 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
Спасибо всем, кто ответил. MasterZiv, наверное, не совсем правильно выразился. Зачем нужны вычисления до компиляции на основе шаблонов? Правильно я понял, что написав код, не использующий специфические библиотеки для windows, спокойно откомпилируется и будет работать в других ОС и в системах с большей/меньшей разрядностью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 12:27 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
Вопрос номер 2 - сложен и требует уточнений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 15:57 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cppнаверное, не совсем правильно выпазился. Зачем нужны вычисления до компиляции на основе шаблонов? Я не очень понимаю, что есть "вычисления до компиляции" С шаблонами игрался очень давно (в конце 90-х, на Borland C 3.x ) - жутко не понравилось, как они были реализованы. В целом хорошую идею загубили реализацией. Тогда, фактически, шаблоны разворачивались a la макрос. При наличие ошибок, искать их было убийственно. Ну и тогда же читал книжку Страуструпа, во второй части книги он свои примеры реализации ряда классов показывал. Лично я половину его классов нафига не понял (на мой взгляд, очень многое было не ООП'шно и коряво). code_cppПравильно я понял, что написав код, не использующий специфические библиотеки для windows, спокойно откомпилируется и будет работать в других ОС и в системах с большей/меньшей разрядностью? При соблюдении ряда правил - да При использовании побитовых операций и сдвига, можно получиться зависимость от разрядности. В свое время (80-е) издавалась тоненькая книжечка Корнига с Ричем - там 50% было посвящено именно написанию переносимого кода. Для большей/меньшей разрядности, порядка байт в слове и так далее. В свое время потребовалось переносить пару своих проектов на C и Java на Linux (до того работал только с Windows). Как не парадоксально, C код смигрировал за день, а с Java кодом проблем было намного больше ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 16:10 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cpp, Зачем нужны вычисления до компиляции на основе шаблонов? вполне очевидно, чтобы перенести какие-то вычисления на момент компиляции. но это достаточно редко бывает на практике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 16:34 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cpp, Правильно я понял, что написав код, не использующий специфические библиотеки для windows, спокойно откомпилируется и будет работать в других ОС и в системах с большей/меньшей разрядностью? спокойно откомпилируется - да, если все используемые библиотеки переносимые. но для каждой платформы программу надо собирать заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 16:37 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cpp2. Зачем нужно метапрограммирование в шаблонах, кроме как для теоретического интереса? Назначение шаблонов - генерация кода (также известная как метапрограммирование). Как и любой другой процесс, это требует анализа условий и принятия решений, для чего служат ветвления, рекурсия и прочее. Шаблоны предоставляют возможности для реализации всего этого в момент генерации кода (при компиляции). Это ответ на вопрос "Зачем?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 17:10 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
Кудрявцев_ЛеонидВ свое время потребовалось переносить пару своих проектов на C и Java на Linux (до того работал только с Windows). Как не парадоксально, C код смигрировал за день, а с Java кодом проблем было намного больше ))) А какие именно проблемы были с Java-linux миграцией? Просто любопытно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 18:02 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
Я сделал опечатку: вычисления не до компиляции, а до выполнения, но во время компиляции. Под вычислениями я имею ввиду не то, когда из ClassA<T> получаются разные классы ClassA<double> и ClassA<int>, а когда на этапе компиляции делаются вполне конкретные вычисления, например, вычисляется сумма арифметической прогрессии или факториал. вполне очевидно, чтобы перенести какие-то вычисления на момент компиляции. Можете привести пример? Вопрос по-прежнему в силе: когда такие вычисления во время компиляции очень помогают/упрощают жизнь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 19:01 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
Под метапрограммированием я понимаю вычисления на основе хитростей с шаблонами (вычисление факториала и т.д.). Возможно, моё понимание ошибочно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 19:03 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cppЯ сделал опечатку: вычисления не до компиляции, а до выполнения, но во время компиляции. Под вычислениями я имею ввиду не то, когда из ClassA<T> получаются разные классы ClassA<double> и ClassA<int>, а когда на этапе компиляции делаются вполне конкретные вычисления, например, вычисляется сумма арифметической прогрессии или факториал. вполне очевидно, чтобы перенести какие-то вычисления на момент компиляции. Можете привести пример? Вопрос по-прежнему в силе: когда такие вычисления во время компиляции очень помогают/упрощают жизнь? не могу привести пример. я сам это не использовал никогда. У меня есть приятель, бывший коллега, они использовали как раз для вычисления факториалов для вычисления размеров массивов, кажется. я могбы предложить, что какие то вещи для кросс платформенности можно на этом делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 21:21 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Так тут же пишут, что C++ и так кроссплатформенный, если не считать побитовые операции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 21:37 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cppMasterZiv, Так тут же пишут, что C++ и так кроссплатформенный, если не считать побитовые операции. битовые операции как раз и так кроссплатформные, дело не в этом. есть куча случаев, когда программа завязывается на какую то специфику операционки или оборудования. Это не значит, что язык непереносимый, это значит, что есть специфика. Например, все программирование сетей TCP/IP специфично для каждой платформы. Есть программирование для платформ с разной битностью слов и адресов, это тоже классика. Например, преславутая задача о упаковке указателя в целое число и обратно. Это все не непереносимость, в смысле, что одну программу надо заставлять работать на разных платформах, это кроссплатформенность, в смысле, что одна и та же программа должна работать по-разному на разных платформах. Это не совсем одно и то же, тут есть тонкая грань, которая заключается в том, что иногда в принципе одна и та же программа не может работать одинаково на разных платформах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 22:28 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cpp4. Почему С++ до сих пор не превратится в кроссплатформенный и многосистемный, как Java и C#? 5. Чем отличается программирование на C++ для Linux от программирования для Windows? Я хочу ещё раз, возможно, в 20-ый, подчеркнуть, что составляет суть переносимости и кроссплатформенности языка С и С++ как его наследника. Просто есть классические языки высокого уровня (3GL), типа Алгол, FORTRAN, PASCAL, PL1, которые тупо имеют железобетонные гарантии и транслируются в машинные коды в соответствии с этим, а есть более другие языки типа С и С++. Как программисты шутят, С -- это переносимый ассемблер PDP-11, думающий, что он -- язык высокого уровня. Это шутка, но в ней есть действительно большая доля правды. С -- это по сути переносимый кроссплатформенный ассемблер, он для этого создавался, для переноса системы Unix с одной платформы на другую. Это язык высокого уровня, обладающий не меньшей мощью, чем ассемблер (т.е. язык машинных комманд), но компилируемый в машинные команды, и не всегда один в один, как ассемблеры. В языке С есть определённые гарантии, которые сохраняются от платформы к платформе, которые и позволяют написать ядро операционки, скажем, линукс, на одной платформе, и портировать её на другую, где есть уже компилятор С. (сам компилятор С так же пишется на С и портируется перед этим шагом). Но любая программа где-то опирается на эти самые гарантии языка, а где-то не может позволить себе это делать, в основном, в силу каких-то причин требований производительности или оптимизации. Вот тут и начинаются танцы с кроссплатформенностью. Это всегда такие моменты, относительно которых С гарантии не даёт, но в данном конкретном месте на данной конкретной платформе надо как-то вертеться, чтобы что-то работало. Это сложно описать в общем, но как бы это так. Я тут немного устал уже, но в общем С-программисты встречаются с необходимостью кроссплатформной разработки достаточно часто, это и та самая задача упаковки указателя в число и распаковки обратно, и задачи типа обращения к одной области памяти в разных видах, например, как массив байт и в виде какой-то структуры, и много других задач подобного рода. Я потом попробую расписать задачу передачи указателя в виде целого на примере организации множественных потоков управления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 22:56 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cppПод метапрограммированием я понимаю вычисления на основе хитростей с шаблонами (вычисление факториала и т.д.). Возможно, моё понимание ошибочно. да, можно написать один шаблон для long-ов, short-ов и char-ов, который будет вычислять факториал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2015, 18:31 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
Ещё один вопрос, чтобы не создавать лишнюю тему. Написал, чтобы закрепить знания код. В книжках пишут, что можно объявить деструктор приватным. Но Компилятор ругается, если же уберу слово private, то всё компилируется. Использую VS2013. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2015, 20:32 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cppЕщё один вопрос, чтобы не создавать лишнюю тему. Написал, чтобы закрепить знания код. В книжках пишут, что можно объявить деструктор приватным. Но Компилятор ругается, если же уберу слово private, то всё компилируется. Использую VS2013. И правильно делает. Ты МОЖЕШЬ объявить деструктор приватным, но тогда это сделает невозможным создание объектов на стеке и в глобальной памяти . Тут именно это и происходит -- ты объявил деструктор приватным, и создаёшь автоматический объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2015, 21:05 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
MasterZiv, тогда при замене на ниженаписанный код всё работает. Единственный ли это способ пользоваться объектами с приватными деструкторами? Правильно я понял, что объект может создаваться в куче, на стеке или в глобальной памяти (static), и существует только 3 вида памяти в С++, которые так и называются? Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2015, 21:46 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cppвсё работает. Не совсем ))) Вот это - утечка памяти, т.к. ничего не удаляет, а только деструктор вызывает. Код: plaintext 1. 2. 3. Правильно делать так: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2015, 21:51 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
code_cppВ книжках пишут, что можно объявить деструктор приватным. Можно и в ногу выстрелить, но обычно не стреляют )). Зачем вам приватный деструктор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2015, 21:55 |
|
||
|
Вопросы по С++
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, в книгах разбирают примеры, наверное, они нужны, а может и нет. На всякий случай решил разобраться. Что про память скажете, про которую я рядом с кодом спросил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.06.2015, 22:02 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2018957]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 168ms |

| 0 / 0 |
