@ProCxx

Страница 2374 из 2477
Anton
24.09.2018
21:59:55
даже сформулировать по-людски не могут )

PRoSToC0der
24.09.2018
22:00:24
Z x{-1} это explicit выражение
да и т.к. Z это unsigned int, то он не допускает то, что не может сконвертить в unsigned int

Constantine
24.09.2018
22:00:40
Z x{-1} это explicit, Z x = -1 это implicit

Google
Constantine
24.09.2018
22:01:13
using Z = unsigned int;

первое не работает, второе работает

PRoSToC0der
24.09.2018
22:01:54
второе работает из-за обратной совместимости

Constantine
24.09.2018
22:02:15
а первое не работает из-за совместимости

PRoSToC0der
24.09.2018
22:02:40
а первое не работает, потому что там не нужна обратная совместимость

Constantine
24.09.2018
22:02:47
так что смысл выражения в точности инвертируется в зависимости от user-defined типа

PRoSToC0der
24.09.2018
22:03:33
в случае с user-defined типом там в обоих местах не нужна обратная совместимость

Constantine
24.09.2018
22:03:56
т.е. грубо говоря это кнопка, которая при нажатии правым мизинцем включает чайник, при нажатии левым мизинцем запускает машину судного дня

не перепутай

в случае с user-defined типом там в обоих местах не нужна обратная совместимость
к черту подробности, как написать "инициализировать только если implicit" и как написать "инициализировать как explicit"

PRoSToC0der
24.09.2018
22:05:28
по логике современного C++ при Z = unsigned int оба места не должны компилироваться

если бы не нужна была обратная совместимость

Anton
24.09.2018
22:06:27
но т.к. обратная совместимость нужна

Google
Anton
24.09.2018
22:06:31
наверни говна )

Constantine
24.09.2018
22:06:32
вы вообще понимаете что я спрашиваю?

PRoSToC0der
24.09.2018
22:06:44
но давай ограничимся только user-defined типами

Constantine
24.09.2018
22:07:03
нет
почему поведение синтаксической конструкции строго инвертируется для user defined типа

и как синтаксически выразить инициализацию с implicit и explicit требованием

PRoSToC0der
24.09.2018
22:07:22
ничего не мешает навернуть свой user-defined unsigned int

Constantine
24.09.2018
22:07:31
повторив поведение unsigned int

PRoSToC0der
24.09.2018
22:08:11
повторив поведение unsigned int
какое именно поведение?

Constantine
24.09.2018
22:08:41
какое именно поведение?
ладно, давайте вопрос на знание языка

что будет если Z это std::byte?

PRoSToC0der
24.09.2018
22:10:02
что будет если Z это std::byte?
оба места будут с ошибками

Constantine
24.09.2018
22:10:15
оба места будут с ошибками
что будет если Z это std::byte и инициализатор 1?

Yarique
24.09.2018
22:10:28
Ребят, подскажите, пожалуйста. auto sock = std::make_shared<boost::asio::ip::tcp::socket>( ioc, ep.protocol() ); sock-> async_connect( ep, [s= std::move(sock) ](auto && ...args){...} ); это undefined behaviour?

PRoSToC0der
24.09.2018
22:10:37
что будет если Z это std::byte и инициализатор 1?
второе место не скомпилируется

Constantine
24.09.2018
22:11:31
второе место не скомпилируется
т.е. std::byte это user-defined тип, правильно?

Constantine
24.09.2018
22:11:56
да
т.е. в C++ по-прежнему нельзя создать integer strong alias?

PRoSToC0der
24.09.2018
22:13:32
т.е. в C++ по-прежнему нельзя создать integer strong alias?
а так ли нужна запись с =? тем более, что можно написать auto y = std::byte{1};

Google
Anton
24.09.2018
22:14:33
её набрать можно быстрее например

PRoSToC0der
24.09.2018
22:14:38
или сделать user-defined литерал 1_byte

Anton
24.09.2018
22:14:38
и читается лучше

а суффиксы эти вообще дичь

PRoSToC0der
24.09.2018
22:14:59
или сделать user-defined литерал 1_byte
хотя это уже больше похоже на единицу измерения

Constantine
24.09.2018
22:15:50
а так ли нужна запись с =? тем более, что можно написать auto y = std::byte{1};
скомпилируется ли std::vector<unsigned int> v; v.push_back(-1); ?

Constantine
24.09.2018
22:17:12
что из следующего компилируется: std::vector<unsigned int> v (-1); std::vector<unsigned int> v {-1}; std::vector<unsigned int> v = { -1 };

да
ссылку на стандарт, пожалуйста

Constantine
24.09.2018
22:18:53
и то же самое - ссылку на стандарт для emplace_back

только первое
template <typename T, typename... Args> void f(Args&&... args) { T x{std::forward<Args>(args)...}; } void foo() { f<unsigned int>(-1); }

PRoSToC0der
24.09.2018
22:20:13
так тебе ссылку на push_back или ссылку на implicit конверсии из signed в unsigned?

Constantine
24.09.2018
22:20:44
@antoshkka репортните там в gcc https://godbolt.org/z/SDaOeW

PRoSToC0der
24.09.2018
22:22:47
что emplace_back компилируется
emplace_back компилируется, потому что там конструируется через круглые скобки

Constantine
24.09.2018
22:26:17
emplace_back компилируется, потому что там конструируется через круглые скобки
так в стандарте и написано? конструируется круглыми скобками?

PRoSToC0der
24.09.2018
22:27:12
так в стандарте и написано? конструируется круглыми скобками?
http://eel.is/c++draft/sequence.reqmts#tab:containers.sequence.optional a.emplace_­back(args) строчка в таблице

на cppreference да, ща в стандарте поищу
https://en.cppreference.com/w/cpp/memory/allocator_traits/construct точнее вот, использует это

Google
PRoSToC0der
24.09.2018
22:37:47
http://eel.is/c++draft/sequence.reqmts#tab:containers.sequence.optional a.emplace_­back(args) строчка в таблице
а вот в стандарте что-то не могу найти где это точно написано, нахожу только такое: http://eel.is/c++draft/container.requirements#general-15.5

PRoSToC0der
24.09.2018
22:46:20
А что найти хочешь?
то, что emplace_back конструирует используя allocator_traits<...>::construct

А что найти хочешь?
нашёл у vector<bool> http://eel.is/c++draft/vector.bool#2: Unless described below, all operations have the same requirements and semantics as the primary vector template, except that operations dealing with the bool value type map to bit values in the container storage and allocator_­traits​::​construct is not used to construct these values. идём от противного

А что найти хочешь?
http://eel.is/c++draft/container.requirements#general-3 скорее всего это то, что нужно

Alex Фэils?︙
25.09.2018
00:26:33
Тоесть нельзя мне delete к выделенному кусочку памяти применять?
нельзя. Можно только если ты его перегрузил. Если хочешь удолить класс, то можно жахнуть так: YourClass->~Dtor();

Чем отличается семафор и двоичный семафор в Windows api или они ни чем не отличаются?
тем, что один не двоичный (т.е. его можно захватить N раз), а второй мутех

Constantine
25.09.2018
00:28:39
Alex Фэils?︙
25.09.2018
00:30:06
это который shared_mutex или как там его?
в C++ да, в Win API, про который был вопрос - это тот, что создается через CreateSemaphore

Constantine
25.09.2018
00:31:03
в C++ да, в Win API, про который был вопрос - это тот, что создается через CreateSemaphore
я просто к тому, что вроде mutex / shared_mutex точное соответствие, хотя я не изучал деталей

Alex Фэils?︙
25.09.2018
00:32:18
ну концептуально да, по факту я не хочу ща ночью по стандартам и реализациям лазить и смотреть)

Alex Фэils?︙
25.09.2018
00:34:32
возможно. ничего не хочу говорить точно, чтобы не ошибиться, голова не варит уже, честно говоря

а я не помню, объект, который обновляет состояние нескольких итераторов в range-based-for, в итоге приняли в 20-й стандарт? (я про некий аналог zip)

я о такой фигне: vector vec1, vec2; for (auto [it1, it2] : zip(vec1, vec2)) { // что-то делаем с итераторами и двигаемся по ним одновременно... }

Andrey
25.09.2018
07:24:02
Я просто оставлю это здесь https://twitter.com/zygoloid/status/1044279153401389056 Вдруг среди обитателей этого чата найдутся любители отвратительного.

Google
Spoonson
25.09.2018
08:45:24
https://godbolt.org/z/1LHVm1 ( ͡° ͜ʖ ͡°) ( ͡☉ ͜ʖ ͡☉) ( ͡◉ ͜ʖ ͡◉)
тут расширение гцц - то, что { blah; blah; value; } возвращает value. Но можно заменить лямбдой наверное

Александр
25.09.2018
10:22:07
Ребят, подскажите, пожалуйста. auto sock = std::make_shared<boost::asio::ip::tcp::socket>( ioc, ep.protocol() ); sock-> async_connect( ep, [s= std::move(sock) ](auto && ...args){...} ); это undefined behaviour?
До C++17 это unspecified behavior, после - должно работать, т.к. добавили правило, что sock->async_connect будет вычислен до того, как будет вычислены аргументы (сделан move в lambda-capture-list). https://en.cppreference.com/w/cpp/language/eval_order "14) In a function-call expression, the expression that names the function is sequenced before every argument expression and every default argument."

Yarique
25.09.2018
10:36:53
А есть причина мувать shared_ptr?
Атомарные счётчики - причина

Не платить за то что не используешь

Spoonson
25.09.2018
10:46:24
Атомарные счётчики - причина
просто мне кажется, что стоимость async_connect должна быть настолько выше инкремента, что на это можно забить. С другой стороны, наличие вообще атомарности в счетчике у shared_ptr мне кажется весьма интересным. Есть ли вообще ситуации, когда это (на практике) полезно?

Yarique
25.09.2018
10:50:17
shared_ptr разумно в многопоточных программах использовать
И при использовании boost asio. Callback должен быть копируем в 90% случаев

Страница 2374 из 2477