@ProCxx

Страница 1076 из 2477
Azoyan
11.07.2017
18:26:56
Я, кстати, как-то делал дешёвую рефлексию на макросах #define MAKE_STRUCT(X) struct { string s = ##X };

Azoyan
11.07.2017
18:29:57
Нифига себе у вас вопросы на собеседовании

Google
Alexander
11.07.2017
18:33:28
оно возмет чужой stack frame, поскольку r - ссылка
я домой поеду уже, а Вы расскажите плиз, что за ерунда то. Не хочется в будущем упасть в грязь лицом. Потому что я всегда думал, что в данном случае никаких проблем быть не должно.

Anatoly
11.07.2017
18:34:01
под виндой этот код не работает

не понимаю, как умудряется ideone это обрабатывать

Alexander
11.07.2017
18:34:58
не понимаю, как умудряется ideone это обрабатывать
так может это причуды компилятора? Мне бы ссылочку на стандарт, где будет написано, что это не должно работать

Anatoly
11.07.2017
18:38:29
The parameter parmN is the rightmost parameter in the variable parameter list of the function definition (the one just before the ...).219 If the parameter parmN is a pack expansion (17.5.3) or an entity resulting from a lambda capture (8.1.5), the program is ill-formed, no diagnostic required. If the parameter parmN is of a reference type, or of a type that is not compatible with the type that results when passing an argument for which there is no parameter, the behavior is undefined.

Alexander
11.07.2017
18:38:37
не понимаю, как умудряется ideone это обрабатывать
ну а в вижле просто чек стоит, чтобы не было ссылкой. А почему этот чек стоит - уже интересно

Anatoly
11.07.2017
18:38:45
это из стандарта 21.10.1 Header <cstdarg> synopsis [cstdarg

в принципе, behavior is undefined мы и наблюдаем

Alexander
11.07.2017
18:39:37
Ясно почему - #define __crt_va_start_a(ap, v) ((void)(ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v)))

Stas
11.07.2017
18:39:51
под виндой этот код не работает
double stddev(int& count, ...) { double sum = 0; va_list args; va_start(args, count); for (int i = 0; i < count; ++i) { double num = va_arg(args, double); sum += num; } va_end(args); return sum; } #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); Application& app = Application::get_instance(argc, argv); int count = 3; qDebug() << stddev(count, 1.0, 2.0, 3.0) << '\n'; return app.exec(); }вернуло 6. все ништяк. Под виндой комплект Qt 5.8.0 стандартный с комплектным mingw

Alexander
11.07.2017
18:40:24
Anatoly
11.07.2017
18:42:28
но круто, что gcc расправился с этой ссылкой, в винде там адрес рефернса и как результат чужой стек

вернее, в студии

Google
Stas
11.07.2017
18:44:30
Короче, я в этом чате сижу и после каждого сообщения думаю: боже какой я имбицил... а тут еще такие вопросы на собеседовании... боже мама роди меня обратно.

Alexander
11.07.2017
18:45:22
http://ru.cppreference.com/w/cpp/utility/variadic/va_start

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

собсно даже на cppref написано это

Stas
11.07.2017
18:47:45
Да чет похоже я вообще нифига не понимаю.

Anatoly
11.07.2017
18:48:13
хотя может ты и прав и это может шокировать соискателя

Azoyan
11.07.2017
18:48:55
Который иногда пользовался принтф и никогда не думал как он работает

И это нормально

Alexander
11.07.2017
18:49:32
хотя может ты и прав и это может шокировать соискателя
а я рассчитывал, что реализация сможет расправиться со ссылкой. Что gcc и делает

можно чуток применить шаблонной магии, и чуток по-другому обрабатывать такой злой кейс

Anatoly
11.07.2017
18:49:58
да, удивлен

Igor
11.07.2017
18:49:59
хотя может ты и прав и это может шокировать соискателя
бегло пробежал взглядом вашу дискуссию, шокирован, ну не могу я сходу понять почему от передачи ссылки вместо значения происходит такой коллапс, теперь пойду почитаю, что там про va_start пишут

Alexander
11.07.2017
18:50:30
Я примерно понимаю, как должно в таком случае работать, так что и сфейлил. Ну а вообще - надо читать описание того, чем пользуешься

Anatoly
11.07.2017
18:50:46
если va_start реализован через взятие адреса, то ответ очевиден

Igor
11.07.2017
18:52:06
вопрос даже несколько в другом: это именно со ссылкой такая бяка, или с указателем тоже будет?

Google
Anatoly
11.07.2017
18:52:32
с указателем все железобетонно

Alexander
11.07.2017
18:52:49
Anatoly
11.07.2017
18:53:02
он полноценная переменная занимающая свое место в стеке аргументов функции

Stas
11.07.2017
18:53:37
Но ведь ссылка этож указатель неявный так сказать...

Alexander
11.07.2017
18:53:43
ну на вижле с указателем не поиграешься. Моя VS2017Pro не компилит

Stas
11.07.2017
18:54:23
епта пойду застрелюсь

Alexander
11.07.2017
18:54:32
void __vcrt_va_start_verify_argument_type() throw() { static_assert(!__vcrt_va_list_is_reference<_Ty>::__the_value, "va_start argument must not have reference type and must not be parenthesized"); }

Anatoly
11.07.2017
18:55:02
ну, круто, выросли

15-а тоже не компилирует

Berkus
11.07.2017
18:58:49
а как автор должен ожидать?
а не важно, написано что не работает если аргумент перед ... это референс или другой который нарушает экспансию

Roman
11.07.2017
19:00:01
часто слышу аргумент: "when you have a global you've made a mistake in the design" по теме singleton'ов и аж засомневался... если у меня действительно есть API класс, который действительно должен быть 1 инстанцией на всё приложение... я разве неправильно подхожу к дизайну с singleton'ом??

Igor
11.07.2017
19:00:28
this

он полноценная переменная занимающая свое место в стеке аргументов функции

Но ведь ссылка этож указатель неявный так сказать...

неа

епта пойду застрелюсь

Anatoly
11.07.2017
19:00:45
Но ведь ссылка этож указатель неявный так сказать...
ссылка реализована как константкный укзазатель, но при этом при взятии адреса ссылки ты всегда получишь адрес реального объекта, а при взятии адреса указателя адрес именно указателя

Google
Roman
11.07.2017
19:05:22
не будь так категоричен
есть какие-то явные недостатки превращения API в глобальный singleton? я лично честно говоря не вижу в этом проблемы

речь идёт об API классе из SDK пакета, т.е. такой API из SDK не имеет смысла инстанцировать несколько раз

Roman
11.07.2017
19:08:57
Обычно проблемы с параллельностью
если API thread-safe тогда проблем с конкуррентным доступом быть не должно же

Alexander
11.07.2017
19:09:12
Ну а так - если это с бд какое-нибудь соединение, то почему бы не заюзать синглтон?

Admin
ERROR: S client not available

Roman
11.07.2017
19:09:41
эта API представляет собой абстракцию удалённого ресурса (по сети)

Berkus
11.07.2017
19:10:52
Обычно проблемы с параллельностью
в современном стандарте с++ инициализация статиков атомарная

Alexander
11.07.2017
19:14:08
Berkus
11.07.2017
19:14:43
ну так эцсамое, есть паттерн

Eugene
11.07.2017
19:15:32
Товарищи, кто-нибудь сталкивался с таким, что VS 2015 начинает жрать 20-40% CPU. Вернее не она сама, а некий процесс Microsoft Visual C++ Package Server. И часто он не завершается при закрытии студии. Может кто-то уже с таким сталкивался и знает что это и как исправить?

Igor
11.07.2017
19:16:23
в современном стандарте с++ инициализация статиков атомарная
один раз поймал великолепный баг, связанный с этим (а может и не совсем с этим) https://stackoverflow.com/questions/32517234/access-violation-on-static-initialization

tl;dr: winXP и server2003 не умеют в thread-safe static при подгрузке dll

Eugene
11.07.2017
19:22:43
Даже так, студия не закрывается, пока руками не завершишь этот процесс PackageServer. После этого студия закрывается с ошибкой (типа падает).

Georgiy
11.07.2017
19:58:32
Добрый вечер. Нашел в поиске вашу группу . Я совсем недавно начал изучать язык , и хотел бы узнать могу ли я здесь задавать вопросы ? Сразу говорю что они будут глупые но по теме. Просто многие эксперты горят от простых вопросов.пис

Google
Stanislav
11.07.2017
19:59:02
для новичков

Vladislav
11.07.2017
19:59:16
С++11-17 это же по сути простые доработки поверх, их не сложно будет применить потом
лучше сразу с c++11 начинать - там многие best practices поменялись

Vladislav
11.07.2017
19:59:56
вот 14/17 уже можно инкрементально накатить

тем более что они не у всех есть пока

Georgiy
11.07.2017
20:00:46
Vlad
11.07.2017
20:13:38


TIL, что во вложенном (и только во вложенном) классе нельзя делать default-конструктор, если есть мембер с дефолтным значением

кто-нибудь, объясните, где такой запрет в стандарте?

и зачем такой запрет вообще нужен?

Berkus
11.07.2017
20:16:50
prog.cc:7:33: error: default member initializer for 'Var' needed within definition of enclosing class 'Outer' outside of member functions Outer(Inner const& inner = {}) {

Vlad
11.07.2017
20:16:58
ну да

так как ты написал ругается кланг

ругаются и кланг и гцц

мс не пробовал

причем если вместо = default написать просто пустое тело {}, то всё ок

почему - я не понимаю

Berkus
11.07.2017
20:22:00
почему - я не понимаю
очень хороший вопрос

Будда
11.07.2017
20:22:16
главный.

Vlad
11.07.2017
20:22:29
нужны гуру

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