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

Alexander
11.07.2017
18:27:18

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

Google

Alexander
11.07.2017
18:33:28

Anatoly
11.07.2017
18:34:01
под виндой этот код не работает
не понимаю, как умудряется ideone это обрабатывать

Alexander
11.07.2017
18:34:58

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

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:42:50

Alexander
11.07.2017
18:43:43

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 написано это

Anatoly
11.07.2017
18:46:26

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
можно чуток применить шаблонной магии, и чуток по-другому обрабатывать такой злой кейс

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

Igor
11.07.2017
18:49:59

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

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

Alexander
11.07.2017
18:50:53

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
а как автор должен ожидать?
а не важно, написано что не работает если аргумент перед ... это референс или другой который нарушает экспансию

Alexander
11.07.2017
18:59:30

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
он полноценная переменная занимающая свое место в стеке аргументов функции
Но ведь ссылка этож указатель неявный так сказать...
неа
епта пойду застрелюсь

Alexander
11.07.2017
19:00:37

Anatoly
11.07.2017
19:00:45

Google

Alexander
11.07.2017
19:00:56

Stanislav
11.07.2017
19:01:43

Igor
11.07.2017
19:01:55

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

Alexander
11.07.2017
19:08:15

Roman
11.07.2017
19:08:57

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
tl;dr: winXP и server2003 не умеют в thread-safe static при подгрузке dll

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

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

Stanislav
11.07.2017
19:58:52

Group Butler [beta]
11.07.2017
19:58:53

Google

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

Vladislav
11.07.2017
19:59:16

Stanislav
11.07.2017
19:59:30

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
нужны гуру