
Michael
03.04.2017
12:58:01
есть варнинг, что отмеченная инлайном функция не заинлайнена
специалисты скажите, почему - потому что возвращает сложный тип по значению?
FORCEINLINE std::wstring GetFilename() const { return Filename; }
и если да, то почему КОНКРЕТНО
я жопой чую что это как-то связано с копированием...

Google

Michael
03.04.2017
13:01:31
(ах да, это только у ВС-компилятора, Кланг или успешно ее инлайнит, или не предупреждает об этом)
Some functions with copy constructed objects passed by value when -GX/EHs/EHa is on.
похоже на то
...да, это потому что влкючены эксепшны

Tony
03.04.2017
13:15:22
правильно ли я пишу запрос SQL?

Michael
03.04.2017
13:17:19
и давайте еще поиграем в угадайку
кланг не имеет этого варнинга
этот имплисит каст звучит очень странно и хотелось бы его найти

Cyber
03.04.2017
13:19:10
там же строка указана и файл

Michael
03.04.2017
13:19:16
это тимплейт

Google

Michael
03.04.2017
13:19:23
STL

Cyber
03.04.2017
13:19:42
поправь STL

Evgen
03.04.2017
13:20:07

Michael
03.04.2017
13:20:08
нет, я думаю, это у меня
просто вс любит искать ошибки не там
...нашел в каком файле...
у меня нет идей
это безумие

babysitter
03.04.2017
13:37:47
у меня нет идей
код не будешь показывать? место куда отсылает даблкликом тоже не показываешь, какого ответа ты ждешь?

Michael
03.04.2017
13:38:02
ты же умный. наверное
место, куда отсылает даблкликом, пожалуйста

Дед Пегас
03.04.2017
13:39:24
Всегда офигивал от такого оформления.

babysitter
03.04.2017
13:39:48
можно по приколу поставить брейкпоинт туда, встать на него и посмотреть колстек

Michael
03.04.2017
13:39:51
какого? это VAX
а, увы, брейк туда не поставить
std::transform(filter.begin(), filter.end(), filter.begin(), ::tolower);

Google

Michael
03.04.2017
13:40:56
спасибо за идею
боюсь, что это совсем не мой варининг
в смысле - удалось порставить со второй попытки
пути VS неисповедимы

Evgen
03.04.2017
13:43:48
?#quiz Чему будет равна переменная t после выполнения данного кода: int t = 0; t = t++;
▫️ (12) 0
27% ??
▪️ (20) 1
46% ????
▫️ (1) 2
2%
▪️ (10) Неопределено
23% ??
▫️ А разве так можно?
0%
? 43 - всего голосов

babysitter
03.04.2017
13:43:51
toLower в глобаьном неймспейсе нашел?

Michael
03.04.2017
13:45:36
угу, он там и есть
в ctype.h

babysitter
03.04.2017
13:46:39
а, ну она вот инт и принимает, а строка широкая. дело закрыто

Sergey
03.04.2017
13:47:15
проверил в vs 2017. t == 1

babysitter
03.04.2017
13:47:37

Александр
03.04.2017
13:48:01
Такие вещи не проверяют где попало, а сверяют со стандартом

Michael
03.04.2017
13:48:03

Anatoly
03.04.2017
13:48:03
std::wstring s(L"test");
std::transform(s.begin(), s.end(), s.begin(), ::towupper);

Michael
03.04.2017
13:48:12
она инт возвращает, а он присваивается вчару

Anatoly
03.04.2017
13:48:44
toupper не предназначен для работы с wchar_t

Michael
03.04.2017
13:48:56
замена на ::towlower решила проблему, спасяп
для анси ренжа
где второй байт 0

Google

Michael
03.04.2017
13:49:48
поэтому и не заметил
удивительно но этот варнинг действительно вывел в серьезный баг
время потрачено с пользой ?

Anatoly
03.04.2017
13:52:19
для латиницы работает насколько я понимаю
ch - character to be converted. If the value of ch is not representable as unsigned char and does not equal EOF, the behavior is undefined. details: http://en.cppreference.com/w/cpp/string/byte/toupper

Michael
03.04.2017
13:52:58
андефайнд не значит что не работает
если прикинуть как работает алгоритм, то до тех пор пока второй байт ноль, все будет работать

Anatoly
03.04.2017
13:53:15
а я и не говорю, что не работает
я говорю, что может быть все что угодно

Michael
03.04.2017
13:53:29
угу, все понятно, спасибо
еще общий вопрос - если я возвращаю контейнер из функции и немедленно присваиваю -
std::vector<> myFunc();
...
std::vector<> v = muFunc();
- следуюет ли ожидать, что это будет мув или не расчитывать на это и указывать мув эксплиситли?

Andrei
03.04.2017
14:14:14
Во-первых не будет ничего.
Потому что RVO
Во-вторых так как ты написал — это копи, а не мув.

Michael
03.04.2017
14:15:01
ожидать, что рво позаботиится об этом?
или не надеяться, если это критично?

Andrei
03.04.2017
14:15:17

Michael
03.04.2017
14:15:17
как это работает для меня?

Andrei
03.04.2017
14:15:24
Это значит, что НЕ РАБОТАЕТ
если тебе нужен мув

Google

Andrei
03.04.2017
14:15:50
напиши мув
если тебе нужна копия — напиши копию.

Tema
03.04.2017
14:16:08
std::vector<> v = std::move(muFunc());

Michael
03.04.2017
14:16:23
то есть, до тех пор пока у меня синтаксис копирования, я могу расчитывать только на копирование, и все остальное зависит от меня?

Andrei
03.04.2017
14:16:29
Да.

Michael
03.04.2017
14:16:32
принято
спасибо, сенсей

Anatoly
03.04.2017
14:16:40
если у тебя std::vector<> myFunc();
то при std::vector<> v = myFunc(); будет вызван перемещающий конструктор
vector(vector &&);

Michael
03.04.2017
14:17:20
вот это я и спрашивал

Andrei
03.04.2017
14:17:31

Michael
03.04.2017
14:17:32
он же генерируется дефолтом, как и остальные, верно?

Anatoly
03.04.2017
14:17:32
все будет в порядке

Andrei
03.04.2017
14:17:49

Anatoly
03.04.2017
14:18:02
он генерируется дефолтом, если мебмеры имеют мув консруктор

Andrei
03.04.2017
14:18:02
Генерируются имплиситли они только для POD-ов

Michael
03.04.2017
14:18:03
это был волпрос вне контекста контейнеров уже

Andrei
03.04.2017
14:18:19
Или для структур ггде у всех полей move есть

Michael
03.04.2017
14:18:28
справедливо
и снова спасибо