HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 18 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- И снова о подводных камнях С++ (https://hlfx.ru/forum/showthread.php?threadid=5071)


Отправлено XaeroX 01-12-2017 в 08:32:

Хитрота И снова о подводных камнях С++

Я люблю язык С++.
Я пока знаю его плохо, потому что изучаю всего 16 лет.
Но за эти годы я успел осознать, что никакие другие языки программирования мне не нужны.
Я чётко решил для себя, что работать буду только в компаниях, где пишут на С++.
Все (ну почти) мои проекты написаны на С++.
И все будущие проекты почти наверняка будут на нём написаны.
И всё же...

Тема не для холивара!
В ней мы будем собирать интересные головоломки, связанные с подводными камнями (а порой и лёгким налётом неадекватности) стандарта языка. Просьба не рассказывать про свои любимые Rust/Go/Swift и тем более жаб и шарпеев. Для них можно создать отдельную тему. В качестве исключения разрешается Дяде Мише написать пост о том, что он не понимает, зачем вообще нужны кресты (а также винды новее WinXP, студии новее 6-й и движки новее свежего XashNT), потому что обычного Си вполне хватает, и там нет вот этих вот (вписать нужное). Но только ему и только один раз!

Итак, начнём.

C++ Source Code:
1
struct foo {
2
  foo() = default;
3
  int a;
4
};
5
 
6
struct bar {
7
  bar();
8
  int b;
9
};
10
 
11
bar::bar() = default;
12
 
13
int main() {
14
  foo a{};
15
  bar b{};
16
}


что будет в a.a и b.b?
Ответ под катом.
Скрытый текст:
Этот текст скрытый. Вы должны оставить хотя бы одно сообщение в теме, чтобы его увидеть.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено nemyax 01-12-2017 в 11:16:

C++ Source Code:
cout << "Hello " << a.a << " and " << b.b << endl;


Цитата:
Hello 0 and 0


Отправлено XaeroX 01-12-2017 в 11:21:

nemyax
В релизе компилил?

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено nemyax 01-12-2017 в 11:24:

Хуже, через браузер =)
https://www.tutorialspoint.com/compile_cpp_online.php
Но там, надо думать, гецеце и дебаг.


Отправлено marikcool 10-12-2017 в 17:20:

в дебаг нули, в релизе может быть мусор

__________________
vk.com/skullcapstudios


Отправлено ComradeAndrew 13-12-2017 в 05:54:

Скрытый текст:
Этот текст скрытый. Вы должны оставить хотя бы одно сообщение в теме, чтобы его увидеть.


Отправлено XaeroX 13-12-2017 в 06:18:

ComradeAndrew
В статье по ссылке всё очень хорошо объясняется.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено ComradeAndrew 13-12-2017 в 08:08:

Да, вроде не плохо объяснено.
Если я правильно понял определения, то в baz

C++ Source Code:
1
struct baz
2
{
3
  baz() {}
4
  int z;
5
};

конструктор тоже user-provided, как и bar, то есть по стандарту поведение у них одинаковое (по крайней мере у меня это воспроизводится одинаково). Значит ли, что эти определения конструктора одинаковы?


Отправлено XaeroX 13-12-2017 в 09:00:

ComradeAndrew
Конструктор baz явно указывает, что инициализировать z не нужно. Поэтому нет, нельзя сказать, что определения одинаковы.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено XaeroX 24-03-2018 в 06:27:

Не подводный камень, конечно, но забавно.
Знаете ли вы, что вот эта конструкция - совершенно легальная в С++, и несёт в себе конкретный смысл?

C++ Source Code:
[](){}

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено nemyax 24-03-2018 в 07:55:

Указазель на пустую функцию?


Отправлено XaeroX 24-03-2018 в 08:01:

nemyax
Не совсем. Это пустая лямбда. Первые скобки - пустой список захвата. Вторые - пустой список аргументов. Третьи - пустое тело.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено ~ X ~ 26-03-2018 в 10:01:

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

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 26-03-2018 в 10:09:

~ X ~
Дык они уже давно появились, ещё в С++11.

Цитата:
~ X ~ писал:
которые используют полтора человека

Ну так они удобнее, чем по старинке отдельные функции или локальные классы-функторы.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!


Отправлено ComradeAndrew 26-03-2018 в 14:54:

Цитата:
~ X ~ писал:
Ага, лямбды. Которые только в новых плюсах и которые используют полтора человека...

Какое интересное у людей представление о плюсах.


Временная зона GMT. Текущее время 09:48. Страницы (2): [1] 2 »
Показать все 18 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024