Russian Qt Forum
Март 29, 2024, 18:06
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Разное
>
Говорилка
>
c++ новый стандарт (комитет)
Страниц:
1
2
3
[
4
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: c++ новый стандарт (комитет) (Прочитано 22728 раз)
Azazello
Самовар
Offline
Сообщений: 103
Re: c++ новый стандарт (комитет)
«
Ответ #45 :
Декабрь 11, 2019, 09:54 »
Цитата: ssoft от Декабрь 11, 2019, 08:19
Запрет использования методов, если объект не является rvalue
Ладно, будем считать что убедили.
Подправте мои выводы:
Вызов метода без возращаемого значения (void method() &&) может оптимизировать код (не понятно как, но что-то связано с расположеним объекта). Также в зависимости от архитектуры вашего класса, вы можете разрешить использование некоторых функций только для временных объектов. Накладывая такое ограничение, вы даете понять ....... Ну, что то да даете понять
«
Последнее редактирование: Декабрь 11, 2019, 10:13 от Azazello
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: c++ новый стандарт (комитет)
«
Ответ #46 :
Декабрь 11, 2019, 14:44 »
Цитата: Azazello от Декабрь 10, 2019, 19:30
Ну или Igors - ну понятно! Ну, вам понятно, помогите мне понять.
Случай не такой уж фантастичный. Напр объект имеет уникальное ID, хорошо если можно отделаться железно запретив копирование, но это не всегда удается. И тогда выгодно знать или это "нормальный" объект или "времянка" что скоро убьется (не обращайте внимание на мелкие подробности типа "регистров" и.т.п). "Руками" выходит довольно коряво
Записан
Azazello
Самовар
Offline
Сообщений: 103
Re: c++ новый стандарт (комитет)
«
Ответ #47 :
Декабрь 11, 2019, 21:00 »
Я уже вот тоже думаю, чего это я так прицепился, ну есть, то есть. Значит кому то нужно.
Хочу закрыть тему.
Часто использую академический С++, где важен сам пример и принцип, поэтому такое внимание к деталям - это к чему: типа чего приципился.
Нашел академическое применение данного метода.
Код:
class Logging {
bool connectToLogServer();
bool isConnected();
void logging(std::string& msg) { if (!isConnected()) return; std::cout << msg; }
void logging(std::string& msg) && { connectToLogServer(); std::cout << msg; }
}
Использование понятно - создав объект постоянным, мы экономим ресурсы на подсоединения к серверу, раз подсоединившись и пуляя сообщения.
Код:
{
Logging log;
log.connectToLogServer();
log.logging("sfsfds");
log.logging("sfsfds2");
}
Когда же нам нужно "здесь и сейчас", мы вызываем "временную функцию".
Код:
Logging().logging("sfsfds");
Почему же оно академическое? Мы не знаем, записало оно или нет. Но думаю есть случаи где это не важно (на то он и лог, в какой лог писать, что лог не работает), а во вторых есть исключения (exception).
Конечно, мы можем усовершенствовать данный класс, проверяя каждый раз наличие соединения, и если его нет, устанавливать.
Код:
void logging(std::string& msg)
{
if (!isConnected())
connectToLogServer();
if (!isConnected())
return;
std::cout << msg;
}
И тогда выгода только в краткости синтаксиса. Но пропустим это
Короче, хочет чел делать без возврата, та и пусть делает, видно для него это имеет смысл. Для меня не приобрел.
А сдругой стороны, кому в этом мире помешала проверка this на null? Да никому.
«
Последнее редактирование: Декабрь 11, 2019, 21:39 от Azazello
»
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: c++ новый стандарт (комитет)
«
Ответ #48 :
Декабрь 11, 2019, 21:39 »
Академичности ради, пример с void и реф-реф, действительно, плохой.
"Обычная" void функция обычно имеет сайд-эффект в том, что она меняет сам объект (например, void std::vector<T>::clear()). Иные сайд эффекты (как то изменение глобальных объектов) - это фу-фу-фу и всеми (справедливо) ругается.
В случае с void foo() && у функции (почти) нет никаких вариантов, кроме как изменить глобальный стейт (запись в лог - это пример такого изменения). Ведь делать что-то с объектом бессмысленно - он вот сейчас будет разрушен и никому (уже) не нужен. А изменение глобального стейта это фу-фу-фу и неакадемично.
«
Последнее редактирование: Декабрь 11, 2019, 21:44 от Авварон
»
Записан
Azazello
Самовар
Offline
Сообщений: 103
Re: c++ новый стандарт (комитет)
«
Ответ #49 :
Декабрь 11, 2019, 21:46 »
Цитата: Авварон от Декабрь 11, 2019, 21:39
Академичности ради, пример с void и реф-реф, действительно, плохой.
"Обычная" void функция обычно имеет сайд-эффект в том, что она меняет сам объект (например, void std::vector<T>::clear()). Иные сайд эффекты (как то изменение глобальных объектов) - это фу-фу-фу и всеми (справедливо) ругается.
В случае с void foo() && у функции (почти) нет никаких вариантов, кроме как изменить глобальный стейт (запись в лог - это пример такого изменения). Ведь делать что-то с объектом бессмысленно - он вот сейчас будет разрушен и никому (уже) не нужен. А изменение глобального стейта это фу-фу-фу и неакадемично.
От блядь. Ну понимашь, вылез в конце.
Я уже гармонию со всеми нашёл, а вы по второму кругу
Ну так привидите пример, когда void && имеет смысл хоть какой. Я тему закрывал, что-бы холивар закрыть. А вы так ХРЯСЬ.
Академичность бывает разная, в зависимоти от курса, уровня заведения и т.д.
В одном случае рассказываем что от 3-5 не имеет смысла, в другом, что получится -2.
НО!, логгирование это и есть смысл глобальной переменной. Уж извените, вы не подумав сказали. QSettings вам в пример. У нас так всегда, начали за упокой, закончили глобальными переменными.
«
Последнее редактирование: Декабрь 11, 2019, 21:59 от Azazello
»
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3257
Re: c++ новый стандарт (комитет)
«
Ответ #50 :
Декабрь 11, 2019, 21:54 »
Цитата: Azazello от Декабрь 11, 2019, 21:46
От блядь. Ну понимашь, вылез в конце.
Я уже гармонию со всеми нашёл, а вы по второму кругу
Ну так привидите пример, когда void && имеет смысл хоть какой. Я тему закрывал, что-бы холивар закрыть. А вы так ХРЯСЬ.
Я так-то с тобой согласен что пример изначальный говно=)
Записан
Azazello
Самовар
Offline
Сообщений: 103
Re: c++ новый стандарт (комитет)
«
Ответ #51 :
Декабрь 11, 2019, 22:28 »
Кстати, ssoft, отдельная благодарность за отзывчивость и понятность ваших объяснений. А также за труд, когда вы писали исходники.
И Igors, за отзывчивость и желание помогать.
Но господи! Перестаньте писать, в том, в чем вы не уверены!
Я думаю, что ответ на stackoverflow вы бы писали с тщательность в 10 раз больше.
Хорошо. Я уж вас точно не лечу, я вас подначиваю
Записан
_Bers
Бывалый
Offline
Сообщений: 486
Re: c++ новый стандарт (комитет)
«
Ответ #52 :
Январь 29, 2020, 12:00 »
Цитата: Авварон от Декабрь 08, 2019, 02:27
Я понял, _Bers таки норкоман и не в курсе, чем отличается constexpr из с++11 от constexpr из
с++14
.
ты походу сам там чего то употребляешь.
иначе как ещё ты мог сделать такие выводы?
Цитата: Авварон от Декабрь 08, 2019, 02:27
Вот уж не знаю, зачем сидеть на msvc2015, кроме как если у аффтора до сих пор Windows 2000. Ну или есть контра жмотится на новую лицензию.
судя по тупости вопроса, ты - не профессионал?
бизнес инертный.
он очень медленно модернизируется, и
только при необходимости
.
в любом случае компоненты должны собираться как старыми компиляторами, так и новыми.
поддержку старых сборок никто не отменял.
Записан
_Bers
Бывалый
Offline
Сообщений: 486
Re: c++ новый стандарт (комитет)
«
Ответ #53 :
Январь 29, 2020, 12:08 »
Цитата: Azazello от Декабрь 07, 2019, 23:35
Но, в свете вашего ответа, довольно развернутого и понятного, попрошу ещё и пункт 5 развенуть.
Боюсь я его тоже не правильно понял "из коробки"
сегодня виртуальные функции не могут быть шаблонными.
однако технически, ничто не мешает сделать поддержку шаблонных.
(с известными ограничениями)
Код:
struct base
{
template<class t>
virtual void foo(const t&) = 0;
};
struct der: base
{
template<class t>
virtual void foo(const t&) {}
};
struct some {};
int main()
{
der d;
base& b = d;
some v;
b.foo(v);
// --- приводит к инстанцированию
// virtual void base::foo(const some&) = 0;
// virtual void der::foo(const some&){}
// и так для всех наследников
}
поддержка шаблоно-виртуальных функций позволит реализовать на с++ полноценную динамику
(динамические типы данных любой сложности. как в скриптовых языках)
без приседаний вокруг
type erasure
Записан
_Bers
Бывалый
Offline
Сообщений: 486
Re: c++ новый стандарт (комитет)
«
Ответ #54 :
Январь 29, 2020, 12:12 »
Цитата: Авварон от Декабрь 09, 2019, 00:28
Ну только норкоман будет прелагать полечить "старый компилятор" введением фичи в новый стандарт.
Примерно похожая фича, кстати, обсуждается - constexpr!
Не очень, правда, ясно, как фича из 20го\23го стандарта решит проблему древнего msvc2015...
это был лишь пример пример ситуации,
где такая фича была бы очень кстати.
можно привести и другие примеры.
в стандарт, кстати, данную фичу таки утвердили:
https://en.cppreference.com/w/cpp/language/consteval
Записан
Страниц:
1
2
3
[
4
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...