@ProCxx

Страница 2175 из 2477
Ilia
04.07.2018
09:30:17
Но закладываться на порядок инициализации глобалов плохо. Если нужно, пиши глобалы статически в функциях, инициализируй их там, и функции, возвращающие ссылки на них, вызывай в нужном порядке. Может так и не всегда надо делать, не в каждом случае, но кое-где это может помочь упорядочить инициализацию, причём гарантированно, поскольку тут уже инициализация произойдёт при первом вызове этой содержащей фукнции, ЖЕЛЕЗНО.

Anatoly
04.07.2018
09:30:50
А когда-то было в алфавитном порядке...
никогда не было, придумал

Ilia
04.07.2018
09:33:01
никогда не было, придумал
Ну было. Я не вру. Я так объходил проблемы с порядком инициализации, просто префиксы переменным давал AA_ BB_ CC_, ну, их немного было зависимых. И все проблемы уходили. Да это и объяснимо, в таблице глобальных имён модуля они же упорядочены по алфавиту, так и инициализировались

Google
Ilia
04.07.2018
09:33:50
Ильюх, не было!!!
Ну чего мы будем спорить о поведении разных компиляторов? Ну, оно может быть разным.

Anatoly
04.07.2018
09:34:14
Ну чего мы будем спорить о поведении разных компиляторов? Ну, оно может быть разным.
строго по стандарту, в порядке определения в одной единице трансляции

Ilia
04.07.2018
10:01:08
Мб в нестандартном компиляторе так было?
Так до 98 го года все компиляторы были нестандартными...

Friedrich
04.07.2018
10:01:18
Да.

Ilia
04.07.2018
10:01:47
Ну и после тоже были некоторые :)

Anatoly
04.07.2018
10:27:55
Так до 98 го года все компиляторы были нестандартными...
Илья, даже наркоманы до такой стратегии инициализации в алфавитном порядке не додумались бы. Ты все же что-то путаешь.

Friedrich
04.07.2018
10:35:46
Ilia
04.07.2018
10:36:43
Нет. И не любят

Antony
04.07.2018
10:37:28
Нет. И не любят
Ага, поэтому у них переменные с именем i или j имеют тип integer а с именами d или f - float

Ilia
04.07.2018
10:38:18
Ну, это уж очень давно было.

Google
Alexey
04.07.2018
10:46:49
Поддержка фортрана и в clion'е есть. То есть перспективность и распространенность фортрана примерно как у раста :-)

Antony
04.07.2018
10:47:47
Поддержка фортрана и в clion'е есть. То есть перспективность и распространенность фортрана примерно как у раста :-)
Неа, распространённость фортрана больше - на нем есть как минимум 10 программ :)

Alexey
04.07.2018
10:48:19
Ждем поддержки Ады в clion'e!

Ilia
04.07.2018
10:49:28
У меня пропосал в стандарт, давайте, чтобы не нужно было писать так: if (Qt::DisplayRole == role) сделаем возможность писать в операторе сравнения сколько угодно равенств, больше одного. Т.е. чтобы можно было писать что-то типа if ( role ============= Qt::DisplayRole) Уж тогда-то точно невозможно будет спутать == и = ...

Ilia
04.07.2018
11:08:33
Dumitru
04.07.2018
11:09:04
Alexey
04.07.2018
11:09:08
std::assign

Чтобы типобезопасно

Ilia
04.07.2018
11:09:27
int a = 42; int b; let b = a; ?

memcpy)))))
memcpy не присваивает...

Dumitru
04.07.2018
11:10:48
memcpy не присваивает...
ну создаешь обьект, потом из другого все копируешь

ну или через copy constructor

Александр
04.07.2018
11:35:24
int a = 42; int b; let b = a; ?
std::assign(b, a), долой всякий сахар

Alexey
04.07.2018
11:36:25
Да!

кроме того, введение еще одного ключевого слова (let) никогда не пройдет через комитет, ибо точно ломает чей-нибудь код.

Mikhail Voronov
04.07.2018
11:40:36
Azoyan
04.07.2018
11:41:06
Парни, а есть перевод той штуки от саттера? 3 дня назад что. Чёт я не понял про контракты. Они стандартную библиотеку хотят на контракты переписать?

Google
Constantine
04.07.2018
11:42:14
Ждем поддержки Ады в clion'e!
А они уже поддерживают С++ ? :)

Alexey
04.07.2018
11:42:49
А они уже поддерживают С++ ? :)
ну, говорят что вот прям c++17 уже ага. плюс они теперь clang'ом пользоваться научились для анализа кота.

Suigintou45
04.07.2018
11:43:20
int a = 42; int b; let b = a; ?
что-то бейсиком попахивает)

Constantine
04.07.2018
11:43:25
года два назад они const в сигнатуре member function не показывали

Alexey
04.07.2018
11:43:30
clang это из коробки или настраивать два часа?
искаропки вроде. но можно и сторонний.

Azoyan
04.07.2018
11:44:24
да, на контракты и концепты
Слушай, а вот, например, vec.at(i) теперь не будет выкидывать out_of_range?

Constantine
04.07.2018
11:44:33
@antoshkka а вы не вспомните, не было proposal по разъобявлению с перемещением? Т.е. как move, только потом еще использовать нельзя

Antony
04.07.2018
11:45:50
Слушай, а вот, например, vec.at(i) теперь не будет выкидывать out_of_range?
Будет Зато вот vector::operator[](unsigned i) будет обложен контрактом, что i < size()

Constantine
04.07.2018
11:46:11
чтобы как в расте?
чтобы ногу не отстреливать

Constantine
04.07.2018
11:46:21
Было, не взлетело :(
А в чем проблема была?

Дмитрий
04.07.2018
11:46:48
Я для такого scope пихаю, но это не всегда спасает.

Azoyan
04.07.2018
11:47:14
Будет Зато вот vector::operator[](unsigned i) будет обложен контрактом, что i < size()
Сейчас это даст мусор или упадёт. А что дадут контракты?

Никита
04.07.2018
11:48:18
то же, что дал бы assert в этом месте

Azoyan
04.07.2018
11:48:37
Но ассерт он только для дебага

Никита
04.07.2018
11:49:38
Ну а тут чуть больше возможностей по конфигурации проверки.

Сможешь оставить в релизе

Google
Antony
04.07.2018
11:50:00
Но ассерт он только для дебага
Через пару часов должен выйти пост на хабр, там будет про контракты )

Admin
ERROR: S client not available

Azoyan
04.07.2018
11:50:07
Ееееее

Alexey
04.07.2018
11:50:28
Cool!

Azoyan
04.07.2018
11:50:45
Сможешь оставить в релизе
То есть все равно упаду с ассертом в релизе)

Никита
04.07.2018
11:51:39
Напишешь свой violation handler, где будешь кидать исключение, и перехватишь где-нибудь. Тогда упадешь красиво

Azoyan
04.07.2018
11:52:07
Не потеряв лицо

Constantine
04.07.2018
11:52:22
Antony
04.07.2018
11:52:39
А в чем проблема была?
Само предложение http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4158.pdf Его рассмотрели, сказали автору работать над ним дальше, и с конца 2014 года нет новостей

Constantine
04.07.2018
11:54:38
Само предложение http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4158.pdf Его рассмотрели, сказали автору работать над ним дальше, и с конца 2014 года нет новостей
Хм.. это не совсем то. Я хочу именно синтаксически запретить дальнейшее использование переменной (текущего scope?), при этом никак не влияя на что-либо остальное в коде.

Azoyan
04.07.2018
11:55:51
Хм.. это не совсем то. Я хочу именно синтаксически запретить дальнейшее использование переменной (текущего scope?), при этом никак не влияя на что-либо остальное в коде.
Я тоже это когда-то хотел. Причём хотел запретить повторную операцию над переменной, например два раза складывать

Никита
04.07.2018
11:56:08
Хм... стоп! Проверки остаются в релизе или не остаются?
Из того, что я помню - опции по конфигурации - implementation defined. Как задашь при компиляции, так и будет.

Constantine
04.07.2018
11:56:08
по типу nodiscard, но наоборот?
По типу auto temp1 = /*результат промежуточных вычислений*/; auto temp2 = foo(std::move(temp1)); /*вот это последнее использование temp1*/

Dmitry
04.07.2018
11:56:58
Или что-то вроде async queue.post(move(msg)).

Antony
04.07.2018
11:57:08
а какие возражения были?
Там предложение было в виде библиотекчной фигни. С ней возникали проблемыс lifetime при memcpy нетривиального объекта

Constantine
04.07.2018
11:59:02
т.е. технически я хочу foo(NO_MORE_USAGE(temp1)); со сложными условиями вроде foo(NO_MORE_USAGE(temp1), NO_MORE_USAGE(temp1)); //сразу CE foo(temp1, NO_MORE_USAGE(temp1)); //Implementation defined

при этом lifetime temp1 не меняется, просто компилятор плюется

Antony
04.07.2018
11:59:35
Я тоже хочу :)

Google
Alexey
04.07.2018
11:59:40
в общем, хочется как в растах всяких, чтобы: fn main() { let foo = Foo { value: 42 }; let bar = foo; println!("{}", foo.value); // compile time error: use of moved value: `foo.value` println!("{}", bar.value); }

Antony
04.07.2018
12:02:23
Первая проблема - это иcользование между единицами трансляции // foo.hpp void foo(something& bar); // foo.cpp void foo(something& bar) { some_thing(std::move_destruct(bar)); } Как омпилятору понять, что после вызова foo пользоваться bar нельзя. Новый интаксис сделать?

Дед Пегас
04.07.2018
12:04:18
Да, го сделаем новую ссылку?) &&&

Constantine
04.07.2018
12:04:35
Да, го сделаем новую ссылку?) &&&
Это отдельный вопрос)

Дед Пегас
04.07.2018
12:05:03
Ну или взять кусочек из управляемого C++ и заюзать ^

Antony
04.07.2018
12:05:06
и destructive forwarding сделаем )

Дед Пегас
04.07.2018
12:05:11
Да!

Dmitry
04.07.2018
12:05:15
std::tru_move

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