+2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
// https://habr.com/ru/company/jugru/blog/469465/
// Инициализация в современном C++
// ...
//Есть примеры ещё более странного поведения этого синтаксиса:
std::string s(48, 'a'); // "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
std::string s{48, 'a'}; // "0a"
> В первой строке создаётся строка из 48 символов «а», а во второй строка «0а». Это происходит потому, что конструктор string принимает на вход initializer_list из символов. 48 является целочисленным значением, поэтому оно преобразуется в символ. В ASCII число 48 — код символа «0». Это очень странно, потому что есть конструктор, принимающий именно такие аргументы, int и char. Но вместо вызова этого конструктора происходит совершенно неочевидное преобразование. В итоге получается код, который чаще всего ведёт себя не так, как мы ожидаем.
КАК? Как можно было столько хуйни наворотить для такой простой вещи, как инициализация переменной? Чем они вообще думают?
Не перестаю удивляться долбоебизму крестостандартизаторов
Запостил: j123123,
05 Октября 2019
gpyrou_nemyx 05.10.2019 07:09 # +2
guest8 05.10.2019 10:44 # −999
ropuJIJIa 05.10.2019 11:40 # 0
guest8 05.10.2019 15:20 # −999
gost 05.10.2019 13:36 # +1
Вот это вот, ИМХО, один из самых каких багров. Именно поэтому я за «def», «function», «defun», «fun», «func» и иже с ними.
ropuJIJIa 05.10.2019 13:44 # +2
>> И экран у него был 80 чаров шириной.
Поэтому «def», «function», «defun», «fun», «func» — непозволительная роскошь. Сишники ведь до сих пор набирают программы на пассивном терминале, подключенном длинной «лапшой» к мейнфрейму.
gost 05.10.2019 14:38 # +1
j123123 05.10.2019 23:00 # 0
scvhost 05.10.2019 23:36 # −102
scvhost 05.10.2019 23:43 # −100
ropuJIJIa 05.10.2019 09:00 # 0
OlegUP 05.10.2019 14:09 # +1
В первом случае ты вызвал нужный конструктор.
Во втором - конструктор от initializer_list<int>.
gost 05.10.2019 14:14 # +2
ropuJIJIa 05.10.2019 14:17 # +2
guest8 05.10.2019 15:23 # −999
hormand 05.10.2019 17:05 # −102
ropuJIJIa 05.10.2019 14:23 # 0
https://metacpan.org/pod/distribution/POD2-RU/lib/POD2/RU/perlsecret.pod
gost 05.10.2019 14:24 # +1
ropuJIJIa 05.10.2019 14:27 # 0
http://pragmaticperl.com/issues/06/pragmaticperl-06-секретные-операторы-perl-и-не-только.html
AnalBoy 05.10.2019 23:30 # 0
gpyrou_nemyx 05.10.2019 14:28 # +1
> Это очень странно, потому что есть конструктор, принимающий именно такие аргументы, int и char. Но вместо вызова этого конструктора происходит совершенно неочевидное преобразование.
gost 05.10.2019 14:31 # +1