|
|
  |
А почему так инициализация |
|
|
|
Jul 26 2018, 14:22
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(DASM @ Jul 26 2018, 17:20)  "С какой стороны будет "обрезана" слишком длинная литеральная константа" - ни с какой, даст ошибку компиляции В том-то и дело, что с литеральной константой компилятор дает лишь предупреждение (об этом выше уже шла речь). Это как в int попытаться засунуть слишком длинный hex: int v = 0x123456780912345; - ошибки не будет, но будет соотв. предупреждение В случае с hex все вполне однозначно - компилятор разместит его именно так, как нужно и читать его будет тоже так, как нужно (в зависимости от BE/LE). С многобайтными литералами получается, что не все так однозначно и это зависит от BE/LE, о чем уже поделился XVR.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jul 26 2018, 15:35
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(DASM @ Jul 26 2018, 18:25)  Вот "например, '12345678' для 4-байтового int) " просто не скомпилируется, я о том В том-то и дело, что все компилируется, но с warning Без warning будет, если число символов строго совпадает с sizeof() соотв. переменной, куда присваиваем. У меня лично вопрос остался один: какая часть этой слишком длинной литеральной строки будет обрезана в зависимости от BE/LE - правая или левая?
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jul 26 2018, 17:12
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(DASM @ Jul 26 2018, 19:43)  да нечитаемо все стало, и реально слишком сложно для изучения. Странно ...  По мне как раз все наоборот - более свежие стандарты плюсов позволяют наоборот - сделать код проще, меньше текста, лучше читаемость и лучше оптимизация компилятора. Может M$ идет каким-то своим путем? ..
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jul 27 2018, 04:57
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Цитата(Forger @ Jul 26 2018, 19:18)  Раз пошла такая пьянка, то договаривайте )) вот что тут https://msdn.microsoft.com/ru-ru/library/zzw4bwhd.aspx Микрософт имел в виду в Код vector <int> v5(5); for (auto i : v5) { v5[i] = i; } и пишут, что v5 = 0 1 2 3 4 . А он нулевой будет в итоге, i это значения ветора по копии, а никак не индекс
|
|
|
|
|
Jul 27 2018, 05:42
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Цитата(Forger @ Jul 27 2018, 08:25)  По логике i тут должен быть int, для этого тут поставлен auto. Такая конструкция должна правильно работать уже с C++11. Или я что-то не понимаю? v5[i] = i; - это фигня полная. Выражение for (auto i : v5) пробежит по всему вектору, присваивая i последовательные значения из этого вектора. Это не индекс. Так как вектор создан нулевым, то это будет так : v5[0] = 0; v5[0] = 0; v5[0] = 0; v5[0] = 0; v5[0] = 0; 5 раз Если сделать Код vector <int> v5(5, 10); for (auto i : v5) { v5[i] = i; } то будет access violation ибо это v5[10] = 10; 5 раз подряд
|
|
|
|
|
Jul 27 2018, 06:26
|

Местный
  
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264

|
Цитата(DASM @ Jul 27 2018, 09:42)  то будет access violation Именно из-за вот таких приколов и сложностей в понимании лично я не взлюбил C++. Хотя и достаточно вумных книжек прочитал по нему... Со временем понял, что выражение "Веревка достаточной длины, чтобы выстрелить себе в ногу(с)" имеет смысл. Был у нас один сотрудник, который всегда писал программы с применением, возможно, всех фишек C++. В итоге я ничего не понял из листинга (совсем!) даже относительно несложного проекта, а при попытке объяснить код сам программист пришел в замешательство со словами "ну, так делают другие программисты и оно так проще для понимания и удобнее". Жесть. И вот лично я люблю Си, чистый Си. И, возможно, не прочь выучить C++ нормально - но куда угнаться-то? Постоянно что-то новое. Считаю, что язык должен быть строгим в своем синтаксисе и однозначно трактуемым. Бомбануло у меня, помню, тогда, когда нашел штук пять разных способов инициализации членов класса при объявлении объекта... Брр, даже не стану вспоминать. Можете ругать
|
|
|
|
|
Jul 27 2018, 06:44
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(DASM @ Jul 27 2018, 08:42)  Это не индекс. По-ходу i - это в данном случае итератор ... Попытался эти примеры прокомпилить в старом добром keil (компилятор v6). Примеры собирает, но отлаживать их вообще неудобно: вроде i по окну watch - int, а нифига - это действительно итератор. Пример и правда не работает, как ожидается (( Честно говоря, не использовал так активно штатные шаблоны (в частности std::vector). До умного for() так и не добрался. Выяснил, что они могут неявно использовать кучу. А кучу не использую, в известных целях (речь про обычные МК). В свое время как-то делал самописный iterator, for_each, умный указатель ... минимально необходимые. Недавно добрался до чудесной штуки - делегаты... В основном - в академических целях, но потом "проникся" )) Тогда использовал "старые" плюсы. Но в новых стандартах плюсов они уже есть и готовые (кроме делегатов), но, в очередной раз прихожу к выводу, что они адски "толстые", по крайней мере в применении к обычным МК. Мне лично из C++11 (для меня нового) пришлись по душе жесткие ограничения при неявном приведении типов - нужно ставить явный static_cast или переписывать код. Также пригодилась инициализация полей классов прямо в описании класса (например, какие-нить константы), т. е. максимально возможный уход от #define. const_expr - вообще чудесная штука. Также считаю полезными final и override.... Это пока то, что вспомнил с ходу. Вполне возможно, что негатив к C++ и его новым фишкам возникает в очень толстых проектах, где работает куча народу и каждый пытается показать другим, что он умеет. Полагаю, что если жестко ограничить применение тех или иных конструкций и выработав соотв. "правила", то негатива будет меньше
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jul 27 2018, 07:37
|

Гуру
     
Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287

|
Господа, пора бы остановиться, а? Очень не хочется превращения темы в очередной холивар. Понятно, что у любых языков, стандартов и компиляторов полно недостатков. Тем более понятно, что умельцы всегда могут наворотить чудес в коде... Обсуждать всякие причуды, валя всё в кучу, смысла нет, ИМХО. Цитата(Arlleex @ Jul 27 2018, 09:26)  Можете ругать  Нет, давайте не будем. У всех свои предпочтения, но провоцировать свару не надо. Это предупреждение.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|