LINUX.ORG.RU

Какой стандарт С++ изучать?

 ,


1

2

Меня сломала жизнь и я решил таки вызубрить какую-нибудь книженцию трупострауса. Только вот какую взять? Стандарт какого года в данный момент наиболее востребован? Про сиху можно с уверенностью сказать, что изучив 90 и взяв некоторые фичи 99, ты на коне. А как с этим в плюсах?

★★★★

в зависимости от области, но неплохо все хотя бы знать. в g++ 5-том будет по умолчанию c++11.

anonymous ()

А как с этим в плюсах?

плюсах надо учится по Страуструпу, потом STL, потом C++11. Невозможно эффективно юзать фичу(например шаблонные классы) если ты ни разу её не потрогал.

emulek ()

Зависит от проектов - но >=11 только расширяют 03, поэтому имеет смысл выучить его. С другой стороны новые проекты, и просто не тухлые, уже давненько переползают на 11ый (даже в ынтырпрайзе ынтырпрайзном). Вообщем основы одна фигня одни и те же.

А что значит «сломала жизнь» если не секрет?

pon4ik ★★★★★ ()
Ответ на: комментарий от pon4ik

А что значит «сломала жизнь» если не секрет?

Ниасиляторы си достали. Работу не сменить, говоря, что хорошо знаешь си, но не плюсы.

unt1tled ★★★★ ()

Зубрить бесполезно, тут надо заниматься практикой с набиванием шишек (на крестах подругому никак). Я бы рекомендовал актуальный стандарт C++14.

m0rph ★★★★★ ()

11/14, ну и понимать как это делалось в 03.

Shadow1251 ()
Ответ на: комментарий от unt1tled

Работу сменить можно всегда в наш век (была бы мотивация и навык).

Могу порекомедовать пройти курс на степике. Он уже закрыт но лекции там остались, я дал ссыль на 1ый блок, остальное там по тегу c++ найдётся. Ничего интересного для человека в теме там нет, но как вводная - очень даже ничего.

pon4ik ★★★★★ ()
Ответ на: комментарий от unt1tled

Я не подстрекатель - но это плохая идея как по мне:) Ибо 11ый это расширение 03, поэтому в той книженции будут подразумевать что ты знаешь 03.

pon4ik ★★★★★ ()
Ответ на: комментарий от pon4ik

Ну я не совсем ноль, могу писать код на плюсах и писал его много лет. Но знания мои не структурированы, теорией не владею практически совсем (кроме части, котора Си) и о стандартах и их разновидностях тоже ничего не знаю.

Да и книжка вроде все описывает «с нуля», а не как дополнение к чему-то.

unt1tled ★★★★ ()

C++11 позволяет писать совсем в другом стиле, нежели C++98/03. Если нет необходимости поддерживать окаменевшее легаси и можно стартовать проекты прямо на C++11/14, то лучше изучать именно их.

Говорят, что хорошо в этом помогают книги Страуструпа «A Tour of C++» и последнее издание «The С++ Programmer Language». Так же хвалят новую книжку Мейерса «Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14».

eao197 ★★★★★ ()

После C++11 на C++03 писать невозможно :(

Если по работе не нужны легаси-03 — C++11 и далее.

Stil ★★★★★ ()
Ответ на: комментарий от eao197

поддерживать окаменевшее легаси и можно стартовать

внутри это всё тоже самое старое доброе C++. Просто сейчас оно в стандарте, а раньше нужны были нестандартные костыли.

можно стартовать проекты прямо на C++11/14

сразу не получится. ТС ведь не будет знать даже внутреннего устройства std::string. Глупость советуешь.

emulek ()

А как с этим в плюсах?

Да все, буквально все гораздо лучше чем в С. Зачем его вообще учить, он устарел и не стоит даже тратить на него время. Даже для 8-битных чипов уже нужно писать на С++ с шаблонами и классами.

sspzd ()
Ответ на: комментарий от emulek

внутри это всё тоже самое старое доброе C++

Наглый звиздешь. Сильно не такое строе и доброе. И чем больше цепляешься за старое, тем сложнее писать на новом C++.

ТС ведь не будет знать даже внутреннего устройства std::string.

А какого именно std::string? Самого простого? Со small-string-optimization? С copy-on-write? На основе ROPE?

Для прикладного программирования вовсе необязательно знать, какие именно потроха в std::string, std::map или std::unordered_set. В какие вещи нужно погружаться, когда профайлер на просадки производительности указывает.

Глупость советуешь.

Чья бы корова мычала.

eao197 ★★★★★ ()
Ответ на: комментарий от eao197

Наглый звиздешь. Сильно не такое строе и доброе. И чем больше цепляешься за старое, тем сложнее писать на новом C++.

по твоей ссылке:

А в 2015-ом году о C++ных шаблонах обязательно нужно иметь представление. Иначе смысла работать с C++ нет, вам вполне достаточно будет обычного plain old C, со всей его прямолинейностью и убогостью простотой :)

вот про это я и говорил, ещё раз, нужно знать что такое шаблоны и уметь их готовить. На своём локалхосте исключительно, ибо в C++11 действительно уже всё приготовлено.

emulek ()

а на чём ты раньше писал?

Harald ★★★★★ ()
Ответ на: комментарий от sspzd

Даже для 8-битных чипов уже нужно писать на С++ с шаблонами и классами

И потом писать на форумах, что atmel - г-но и для мигания светодиодом следует использовать stm32f7 минимум ))

Old_Hamster ★★★ ()
Последнее исправление: Old_Hamster (всего исправлений: 1)
Ответ на: комментарий от emulek

нужно знать что такое шаблоны и уметь их готовить

ЕМНИП, Страуструп с 3-го издания «The C++ Programming Language» уделяет серьезное внимание шаблонам и их использованию. А новая книга «A Tour of C++» им задумывалась как введение в современный C++ без необходимости иметь за плечами C-шный багаж.

eao197 ★★★★★ ()
Ответ на: комментарий от eao197

ЕМНИП, Страуструп с 3-го издания «The C++ Programming Language» уделяет серьезное внимание шаблонам и их использованию. А новая книга «A Tour of C++» им задумывалась как введение в современный C++ без необходимости иметь за плечами C-шный багаж.

ох… Я его и советовал, пруф: Какой стандарт С++ изучать? (комментарий)

emulek ()
Ответ на: комментарий от sspzd

Даже для 8-битных чипов уже нужно писать на С++ с шаблонами и классами.

классные сегодня чипы. Мне когда-то приходилось на чистом С, да и с ассемблерными вставками иногда.

emulek ()
Ответ на: комментарий от Old_Hamster

И потом писать на форумах, что atmel - г-но и для мигания светодиодом следует использовать stm32f7 минимум ))

Это где я такое писала? atmel говно конечно, но спорим напишу программу мигания с шаблонами и классами, которая компилится g++ в 16 байт?

sspzd ()
Ответ на: комментарий от sspzd

Это где я такое писала?
писала

wtf? Это новый флеш-моб на лоре? Весна? В куче тем народ пишет в женском роде

Поддерживаю, кстати, анонимуса выше. Не нужен тебе С++, дурной язык. Пробежись по диагонали по Страуструпу и забудь

anonymous ()
Ответ на: комментарий от anonymous

Не нужен тебе С++, дурной язык.

не самый простой, скажем так.

emulek ()
Ответ на: комментарий от unt1tled
template<typename port_type, typename val_type,
	 const port_type port,
	 const bval_type bval>

class led_template
{
public:
  led_template()
  {

    *reinterpret_cast<volatilebval_type*>(port)&=static_cast<bval_type>(~bval);

    *reinterpret_cast<volatile bval_type*>(pdir)|= bval;
  }
  static void toggle()
  {
    // Toggle the LED.
    *reinterpret_cast<volatile bval_type*>(port)^= bval;
  }

private:
  static constexprport_type pdir = port - 1U;
};

namespace
{

  const led_template<std::uint8_t, std::uint8_t, mcal::reg::portb, mcal::reg::bval5> led_b5;
}
int main()
{

  for(;;)
    {
      led_b5.toggle();
    }
}

В 16 байт, отвечаю.

sspzd ()

Думаю большой разници нету. Но я бы посоветовал пойти «историческим» маршрутом а именно - С++03 -> С++03 with boost (если планируете заниматься серверсайдом) -> C++11. 14 стандарт я както даже и не смотрел есще ...

zaz ★★★★ ()
Ответ на: комментарий от sspzd

С++11 не замещает а расширяет/дополняет С++03. Если есть опыт работы с 03+boost то все расширения в С++11 становятся очевидны (зачем нужны как применять) + появляется понимание как это работает «изнутри». И в C++11 буст тоже нужен (это ведь не только смартпоинтеры и биндинг, есще есть и куча прикладных либ в бусте - тотже ASIO).

zaz ★★★★ ()
Ответ на: комментарий от sspzd

нужно больше КАСТОВ!

А если серьезно - посмотрев на этот код - захотелось вышибить себе мозги. Из чего-нибудь покрупнее пистолета. Дробовик будет маловат, тут из гранатомёта шмалять надо походу...

Pinkbyte ★★★★★ ()
Ответ на: комментарий от Pinkbyte

Да, выглядит устрашающе, сам ни на секунду не задумывался над использованием C++ в контроллерах. Но ведь серьезно в C нехватает хорошего инструмента для кодогенерации. Случай, когда пространства кода хватает, а времени для выполнения нехватает. Как тогда поступать?

  • внешний кодогенератор и вечная поддержка актуальности кода (особенно хорошо смотрится с закрытыми компиляторами),
  • или препроцессор и дорога в ад.
anonymous ()
Ответ на: комментарий от anonymous

а в gcc почему было не написать? Это типо цель такая, что «с шаблонами и классами»? Ну можно, кто-бы сомневался, можно и тетрис на sed…

Но зачем? Ценность С++ в удобных абстракциях, а если надо «в 16 байт» я лучше на ассемблере накатаю, исходный текст будет короче, и идеально понятный. А не ЭТО.

emulek ()
Ответ на: комментарий от sspzd

А теперь скомпилируй ЭТО (например, под atmega16) и удивись.
Жду HEX в 16 слов.

Old_Hamster ★★★ ()
Последнее исправление: Old_Hamster (всего исправлений: 1)

C++11 это C++03 плюс новые фичи. Так что можешь учить по порядку, но не тратя время на хаки C++03 которые стали не нужны с приходом нового стандарта. C++14 больше деталями отличается, о них узнаешь в процессе кодинга из справочников (cppreference.com).
После понимания синтаксиса и основ советую к прочтению Effective C++.

snizovtsev ★★★★ ()
Ответ на: комментарий от Old_Hamster

И вообще, этот ваш гцц любит насиловать стек при свободных регистрах

я знаю. И знаю почему. Замени стек на регистры, скомпиляй и проверь скорость (я пробовал на x86). Будешь удивлён.

emulek ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.