Danil
госты это прикольно, а у меня маленький и простой формат
Maksim
Добрый вечер. Есть код https://wandbox.org/permlink/4ebMPeiyxMdqzahD . На последнем MSVC выдаёт No, на GCC 7.2.0 Yes. Кто прав и как поправить, чтобы везде было Yes?
Philipp
Ребят, а тут можно совсем нубские вопросы задавать? Как правильно конкатенировать строки в С++ аналогично питоновскому %s?
Anonymous
@supapro
Aidar
Иерархии лучше
Aidar
Если сделаешь Кей велью с иерархиями тогда норм
Aidar
Но тут прикол возникает в том что тебе всю экосистему надо перестраивать начиная от силибы
Aidar
Кстати не вижу разницы между ключ-значение и фс, где фактически ключ это путь
Matwey
У ФС нет вторичных индексов
Matwey
Про которые ты не прочитал
Matwey
Со вторичными индексами иерархия делается легко
Aidar
Может ФС ещё и дерево?
分解物質
современные фс представляют из себя направленный граф
Aidar
Я даже не знаю ни одну ФС тру дерево
分解物質
Я даже не знаю ни одну ФС тру дерево
старое из unix research system до изобретения симлинков
Matwey
Уверен?
mkdir -p a b/b1 c touch a/1 b/2 b/b1/3 c/4 setfattr -n user.k -v 1 a/1 setfattr -n user.k -v 3 b/2 setfattr -n user.k -v 2 b/b1/3 setfattr -n user.k -v 1 c/4 Как мне найти все файлы с user.k >= 2 не сканируя всю ФС?
Matwey
Я, может, чего-то не знаю. Просто спрашиваю
Aidar
Я, может, чего-то не знаю. Просто спрашиваю
Симлинки сделать в пути которые являются втлричными ключами
Matwey
Ну пусть даже и сделаю. А содержимое директории гарантированно возвращается в каком-то порядке? Вообще говоря нет. Мне потом придется прочитать список всех объектов имеющих ключ и потом их фильтровать или сортировать в памяти.
usernameak
жир32
Не скажу, что это дерево
usernameak
За исключением директормй
Berkus
Berkus
а вот на иерархическую фс такие индексы фиг натянешь без ЖЫРНОГО оверхеда
Matwey
+, именно так я и проектирую свою фс )
Жена есть? Проектирование ФС может пагубно на этом сказаться. Были прецеденты
Anonymous
Приветствую, граждане!
Anonymous
Есть кто ?
Anonymous
Подскажите, каков смысл такой записи кода: *&Ptr или &*Ptr ? Я этот пример встретил в книжке
Anonymous
По отдельности смысл каждой операции знаешь?
Ну вообще-то как я понял из примера в книжке, то это отображает адрес той переменной, на которую указывает указатель. Так или нет ? В книжке не даны комментарии по поводу такого вида нотации.
Matwey
&x - взять указатель на переменную
Matwey
*p - взять значение из указателя
Matwey
*&x тоже самое что просто x
Anonymous
Погодите. Это я и так знаю. Но как это относится к моему вопросу ? Если запустить программу с таким кодом, как я привел. То прога выдает один и тот же адрес. Тогда какова ее смысловая нагрузка такой записи ? Что это дает ?
Matwey
такая же как у [] () {} ()
Matway
Подскажите, каков смысл такой записи кода: *&Ptr или &*Ptr ? Я этот пример встретил в книжке
Это имеет смысл для unique_ptr, например. То же самое, что get, но короче.
Anonymous
чисэс.
Anonymous
Ладно. Со временем я думаю такие пробелы восполняться.
Anonymous
Это имеет смысл для unique_ptr, например. То же самое, что get, но короче.
Я конечно извиняюсь. Во всех языках отсутствует возможность ссылок, как в плюсах. К чему они вообще ? Я когда проходил функции, то там описывалась возможность передавать аргументы по значению и по ссылке. Зачем вообще эти у4азатели ???
Anonymous
я имею в виду сам указатель. Я без этих указателей смогу в функцию передать либо по значению либо по ссылке на это значение. Зачем указатель??
Nik
Массив тоже передашь?
Nik
И динамические объекты...
Anonymous
массив легко передается в функцию. Сам массив является его указателем. Точнее его 1-й элемент
Anonymous
В книгах пишется что это очень большие возможности сулит использование указателей, но я вижу что это только запутывает и добавляет страниц в книге
Artemiy
Я смотрю у вас нет ответа таки
Чем, прости, тебя ответ про массивы и динамические объекты не устроил?
Anonymous
Ну я до динамических объектов еще не дошел по изучению. А массивы на легке работают с простыми ссылками на значение.
Artemiy
И наверное все же лучше сюда переместиться
Anonymous
Простыми ссылками на что?
Переменную в функцию можно передать и по ссылке и по значение, точно также как и имя массива указываешь в аргументе, его первый элемент и является указателем так сказать. Про масссивы это шляпа - не убедили
Artemiy
Давай в @supapro продолжим
Anonymous
Я так понимаю что плюсы просто порождены С, а там нет ссылки. Вот и все.
Anatoly
Я так понимаю что плюсы просто порождены С, а там нет ссылки. Вот и все.
ссылка этот тот же указатель, только не может быть nullptr
Anatoly
Ясно
массив - это недообъект, поскольку его нельзя скопировать. массив может быть приведен к указателю на его первый элемент, но обратное неверно, что указатель - это массив. это тоже ясно?
Artemiy
ссылка этот тот же указатель, только не может быть nullptr
и переприсвоена не может быть. И арифметика там другая (её нет кажется) :)
Anonymous
массив - это недообъект, поскольку его нельзя скопировать. массив может быть приведен к указателю на его первый элемент, но обратное неверно, что указатель - это массив. это тоже ясно?
Ну я так понимаю что время все расставит по местам все пробелы. Будем продолжать изучение на более глубоком уровне. Кстати, а Qt для веб приложений тоже годится ? Ну я имею в виду игруху сделать html5 ?
Artemiy
Про указатели можно так ещё: мы так или иначе работаем с памятью. В С++ взаимодействие с этой памятью не скрыто под капотом, а для того, чтобы к этой памяти (почти напрямую) обращаться, нужны указатели. Ссылки чуть более высокий уровень занимают и представляют собой возможность создать alias для переменной, условно говоря та же переменная, но с другим именем. Во многих случаях с указателями в С++ тебе напрямую не придется работать, используя для этого smart_ptr-ы, vector-ы вместо массивов и т.п. С указателями уже познакомишься, если попробуешь написать свои аллокаторы и менеджер памяти или те же smart-ptr-ы реализовать John
ConfiG
John Connor, я тебя увидел в группе Qt.
Egor
не могу разобраться с аллокацией памяти под лямбду (чистый си) struct test { int a; int b; void (*c)(); }; struct test* ctTest() { struct test* self = malloc(sizeof(struct test)); printf("start %x\n", self); self->a = 2; self->b = 3; void* (*c)() = malloc(sizeof(void*)); printf("c add %x\n", c); c = lambda(void, () { printf("lalal"); }); printf("c add %x\n", c); self->c = c; return self; } struct test* d = ctTest(); struct test* e = ctTest(); вот лог примерный start c85f28 c add c85f40 c add 61fe5e --- start c85f50 c add c85f68 c add 61fe5e в конце концов адрес для двух структур становится одинаковым чяднт?
Berkus
void* (*c)() = malloc(sizeof(void)); шта прости?