@ProCxx

Страница 928 из 2477
reagentoo
01.06.2017
13:28:23
да все тайп трайтсы криво названы)

Дед Пегас
01.06.2017
13:28:28
Вангую ради лулзов.

Alex Фэils?︙
01.06.2017
13:28:53
У майерса было вроде б ппочему

Antony
01.06.2017
13:33:59
т.е. разрешено неявное преобразование string&& в string&
Это расширение Visual Studio, которым многие недовольны (особенно печально, когда разработка ведётся на VS, а потом еще на GCC надо собираться). Лучше таким не пользоваться

Google
Дед Пегас
01.06.2017
13:35:22
Расширениями вообще не стоит пользоваться.

Antony
01.06.2017
13:35:26
void foo(std::string&& s) { std::string tmp = std::move(s); //не будет ли здесь оверхеда при создании новой строки? std::cout << tmp << " 1\n"; } Чтобы гарантированно без всякого overheada void foo(std::string&& s) { std::cout << s << " 1\n"; s.clear(); }

Дед Пегас
01.06.2017
13:35:30
Если не хаскель, конечно.

Antony
01.06.2017
13:36:47
void foo(std::string&& s) { std::string tmp = std::move(s); //не будет ли здесь оверхеда при создании новой строки? std::cout << tmp << " 1\n"; } Чтобы гарантированно без всякого overheada void foo(std::string&& s) { std::cout << s << " 1\n"; s.clear(); }
Хотя в зависимости от имплементации, clear() может не деаллоцировать память. Так что первый способ - если еще хочется и память освободить, второй - если память освобождать нет необходимости

Constantine
01.06.2017
13:43:06
если предполагается (конвенцией), что эта ссылка может быть сохранена, то такое преобразование - ошибка

я в свое время не придумал, как в стандарте C++98 не делать лишнюю перегрузку вызова с неконстантным функтором, поэтому пользовался ради параметра по умолчанию в таких случаях

Constantine
01.06.2017
13:48:25
на 2003 вижаке я не уверен, что это вообще работало :)

ему лучше было вопросы посложнее не задавать

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

reagentoo
01.06.2017
13:52:38
...

а динамического полиморфизма на статике сейчас модного не завезли?

Google
Constantine
01.06.2017
13:53:14
что вы имеете в виду?

reagentoo
01.06.2017
13:53:51
вопрос на libastral рассчитан)

но это ладно

Alex Фэils?︙
01.06.2017
13:54:32
Динамический полиморфизм - это виртуальные функции

Статический - это цртп

reagentoo
01.06.2017
13:54:51
ага

всё так

Alex Фэils?︙
01.06.2017
13:55:25
шаблонные функции-члены класса не могут быть виртуальными, поэтому, думаю, что нет

reagentoo
01.06.2017
13:56:08
максимально приближенно и более менее юзабельно хотя бы

Constantine
01.06.2017
13:59:31
Я все еще не понимаю, что хотят. Аналог виртуальных шаблонных функций? Вроде, такого эффекта можно добиться, если из шаблонной функции возвращать интерфейс

грубо говоря, если мы хотим сделать template <Interface> /*virtual*/ Interface* QueryInterface(); у некоторого класса, мы просто ровно так ее объявляем и не реализуем, а вопрос корректности вызова сваливаем на линковку

и дальше "виртуальные" QueryInterface определяются так, чтобы можно было в конструкторе потомка подменить возвращаемый интерфейс

reagentoo
01.06.2017
14:09:47


AlexanderV2
01.06.2017
14:22:27
/stat@combot

Combot
01.06.2017
14:22:27
combot.org/chat/-1001031904034

MrSmeet
01.06.2017
14:25:48
Нужна векторная эмблема на сумку

Azoyan
01.06.2017
14:45:24
Нет конечно. Это просто пример

С другой стороны после вывода, строка не нужна. Почему бы её не замувить?

Constantine
01.06.2017
14:57:35
вызывающий может ее просто деструктнуть тогда

Google
Aidar
01.06.2017
15:00:27
смысла нет

уменьшает область применения функции только

Vladislav
01.06.2017
15:04:23
void foo(std::string&& s) { std::string tmp = std::move(s); //не будет ли здесь оверхеда при создании новой строки? std::cout << tmp << " 1\n"; } Чтобы гарантированно без всякого overheada void foo(std::string&& s) { std::cout << s << " 1\n"; s.clear(); }
Вообще, функции не должны принимать rvalue референсы в общем случае (если не конструктор/оператор присваивания). Почти всегда лучше принять по значению, тогда вызывающий может выбрать, сделать ему копию или замувать.

Antony
01.06.2017
15:15:26
Вообще, функции не должны принимать rvalue референсы в общем случае (если не конструктор/оператор присваивания). Почти всегда лучше принять по значению, тогда вызывающий может выбрать, сделать ему копию или замувать.
+1 Исключение из правила - функции, вызов которых должен идти последним и которые принимают большие объекты. Например если делаем хитрый сериализатор, а вся предыдущая логика направлена на формирование данных, то имеет смылс делать void serialize_and_send(std::vector<std::byte>&& data) . Тогда пользователь будет вынужден писать std::move - мы даём хинт, что данные мы у него отбираем. Тоесть написать неэффективно становится сложнее

Aidar
01.06.2017
15:28:30
ахах

Surreal
01.06.2017
15:34:30
Если в классе хранится просто объект, то имеет ли смысл в конструктор принимать объект по значению и мувать из него просто?

Alexey
01.06.2017
15:34:31
статический полиморфизм - это перегруженные функции и шаблоны :)

Дед Пегас
01.06.2017
15:36:34
Любопытно https://www.nayuki.io/page/near-duplicate-features-of-cplusplus

Azoyan
01.06.2017
15:37:37
Если мы в передаем в функцию что-то например: void foo(string& str) { std::cout << str; }, то на самом деле компилятор это перепишет в это void foo(string* str) { std::cout << *str; } разве нет?

далее, если у нас какие-либо действия со строкой, то мы каждый раз тратим время на разыменовыание указателя

Surreal
01.06.2017
15:38:20
Да, ссылки через указатели внутри реализованы.

Azoyan
01.06.2017
15:38:53
поэтому, я хотел бы замувить, чисто для скорости.

Дед Пегас
01.06.2017
15:38:57
Azoyan
01.06.2017
15:40:05
А после использования строка нам не нужна. Вот пусть она внутри функции и умрёт

Surreal
01.06.2017
15:42:17
поэтому, я хотел бы замувить, чисто для скорости.
На самом деле очень спорный вопрос, надо бенчить и смотреть в асм. И это даст прирос только в случае, когда у вас функция вызывается ощутимо много раз и в качестве аргументов передаются каждый раз разные строки.

Igor
01.06.2017
15:43:03
У майерса было вроде б ппочему
Не, просто "так есть и все тут, move ничего не перемещает, только кастит"

Azoyan
01.06.2017
15:43:55
А как замувить const char* ?

Surreal
01.06.2017
15:45:00
Никак, это литерал.

Google
Constantine
01.06.2017
15:45:20
в смысле? просто берем и мувим

Azoyan
01.06.2017
15:45:23
можно ли мувить массивы в Си-стиле?

Constantine
01.06.2017
15:45:47
const char *s = "Hello, world!" foo(std::move(s));

Surreal
01.06.2017
15:45:55
Зачем их мувить? Они итак только указателем представлены.

Constantine
01.06.2017
15:45:59
правда, делает совсем не то, о чем вы подумали

Surreal
01.06.2017
15:46:11
Constantine
01.06.2017
15:46:31
это компилируется

я уверен

Admin
ERROR: S client not available

Igor
01.06.2017
15:46:35
Constantine
01.06.2017
15:47:07
правда, пользы в этом столько же, сколько в int x = 0; foo(std::move(x));

ну если сигнатура foo будет void foo(string), <s>я даже сомневаюсь</s> работает

если void foo(const char*), то точно скомпилируется и сработает

Aidar
01.06.2017
15:51:37
#supapro

Group Butler [beta]
01.06.2017
15:51:38
#supapro
Чат supapro.cxx: https://telegram.me/joinchat/BYlFbD3eN3JMaG34hyh96w

Aidar
01.06.2017
15:52:16
Vladislav
01.06.2017
17:23:05
далее, если у нас какие-либо действия со строкой, то мы каждый раз тратим время на разыменовыание указателя
вообще, скорее всего твой метод заинлайнится и никакой ссылки не останется вообще

Дед Пегас
01.06.2017
17:23:31
Antony
01.06.2017
17:31:54
Любопытно https://www.nayuki.io/page/near-duplicate-features-of-cplusplus
В начале список, в котором говорится что С++ скопировал фишки из С, а внизу обяъснение что фишки то разные... Напоминает дипломную работу нерадивого студента: "Слон и черепаха - одно и то же, у обоих есть 4 лапы и хвост <50 страницами ниже> Как мы видим черепаха вообще не похожа на слона, т.к. у слона есть хобот!"

Google
reagentoo
01.06.2017
18:10:24
с Пензы есть кто?)

Alex Фэils?︙
01.06.2017
18:13:30
Вроде был

Antony
01.06.2017
18:24:29
Я завтра в Казани

Alex Фэils?︙
01.06.2017
18:32:27
А. Точно. Блин, я не смогу туда( надо запилить будет потом заметочку по той встрече

Александр
01.06.2017
18:34:15
А о чём вообще болтают на встречах?)

Ну то есть в чатике еще можно обсудить всякие проблемы, поотвечать на вопросы

Я про встречи в антикафе

Aidar
01.06.2017
18:34:58


Alex Фэils?︙
01.06.2017
18:35:45
Ну то есть в чатике еще можно обсудить всякие проблемы, поотвечать на вопросы
Мы 27 обсудили фичи языков, докладец автора сфинкса глянули, его оьсудили, етц

Aidar
01.06.2017
18:36:08
понятно что явное лучше неявного но лямбды же для сокращения придумали

Constantine
01.06.2017
18:37:51
а как парсить (x(y))?

Alex Фэils?︙
01.06.2017
18:38:13
там лулзный был. Про ит в целом

Aidar
01.06.2017
18:38:15
как x.operator()(y)

а как парсить (x(y))?

Constantine
01.06.2017
18:38:36
auto f = [](x(y)){} и неявное auto

Aidar
01.06.2017
18:38:49
эмм

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