Anatoly
а так, пожалуйста, но с модификацией исходной строки
Ioann_
Угу. Все верно. Ну я это к чему: во первых, вчерашний код тупо mallo чил, во вторых - действительно, многие при написании парсера попадаются в эту ловушку. Например, стоит погуглить парсеры xml ...
Александр
Anatoly
ну вот такой фиговый auto
Anatoly
Александр
string_view шикарен
Ioann_
Еще, для тех кто в танке - есть такая фишка, что вот такая фича int mas[100][100][100] - полностью и целиком лежит линейном куске памяти.
Александр
Александр
</sarcasm>
Pepe 🐸
Ioann_
Да я так на всякий. Часто встречаюсь что матрицы читают используя два цикла :)
Александр
ГуНиСе️
ГуНиСе️
не надо путать массивы с указателями
Ioann_
А еще можно писать new не в цикле, а сразу
Mikhail
ясно что такая конструкция преобразуется в std::initializer_list<T>, хотя были проблемы в gcc: https://stackoverflow.com/questions/32515183/const-auto-stdinitializer-list-difference-between-clang-and-gcc
но даже если и все скомпилится, то именно в тип std::initializer_list<int>? абсолютно на всех архитектурах? я в этом сомневаюсь..
опять же если применять auto x = {0 ,1} то по аналогии должно быть auto x = {{0, 1}, {2, 3}} и т.д. но этого нет.
Лично я, как и говорил ранее, сторонник использовать auto только там где и так явно определен тип, например:
auto x = std::list<int> {0 , 1, 2}
ГуНиСе️
ГуНиСе️
ясно что такая конструкция преобразуется в std::initializer_list<T>, хотя были проблемы в gcc: https://stackoverflow.com/questions/32515183/const-auto-stdinitializer-list-difference-between-clang-and-gcc
но даже если и все скомпилится, то именно в тип std::initializer_list<int>? абсолютно на всех архитектурах? я в этом сомневаюсь..
опять же если применять auto x = {0 ,1} то по аналогии должно быть auto x = {{0, 1}, {2, 3}} и т.д. но этого нет.
Лично я, как и говорил ранее, сторонник использовать auto только там где и так явно определен тип, например:
auto x = std::list<int> {0 , 1, 2}
> абсолютно на всех архитектурах?
да, именно так
Pepe 🐸
Pepe 🐸
И если в компайл тайм задан
ГуНиСе️
Pepe 🐸
ГуНиСе️
да
Mikhail
да
посчитай какой длины массив arr в реалтайме в функции void foo(int *arr) { };?
посчитать размер массива можно только в том где он определен
Anatoly
это не массив, а указатель
Anatoly
массив приводится к указателю на свой первый элемент, но это разные сущности
ГуНиСе️
ГуНиСе️
только указатель на целое
ГуНиСе️
и функцию
Mikhail
Pepe 🐸
да
https://stackoverflow.com/questions/7221981/how-to-make-a-dynamic-sized-array-in-c
Вот тут пример из С. Ты просто выделяешь память кпод массив
Anatoly
никакой a не указатель
ГуНиСе️
Anatoly
я о том, что кто вам вбил в голову, что массив C/C++ это указатель?
Anatoly
что одномерный, что n-мерный линейно представлены в памяти
Pepe 🐸
Anatoly
int** -
Anatoly
это ниразу не тип двумерного массива
Mikhail
int a[2] = {0}; for (int i = -10; i < 0; i++) cout << a[-10] << endl; как весело бегать по отрицательным элементам
все массивы так себя и должны вести.
Anatoly
UB
Александр
Pepe 🐸
Pepe 🐸
Но по памяти наверно
Pepe 🐸
Раскиданы
Pepe 🐸
То есть не линейно
Mikhail
что это просто адрес памяти, относительно которого ты можешь перемещаться как ты вздумаешь (к абсолютно любому индексу). и никто тебя не остановит, пока не получишь SIGFAULT.
Pepe 🐸
У указателя на первый одномерный массив и указателя int**
Александр
Anatoly
Andrei
Anatoly
массив не указатель, а поименованный линейный участок в памяти, над которым недопустима адресная арифметика, его нельзя переприсвоить, скопировать. он приводится к указателю, но это не позволяет говорить о том, что эти вещи одинаковы
Mikhail
хотя бы проверку на валидность доступа по индексу, и операцию взятия длины.
только после этого массив в сишечке или плюсах станет массивом.
Anatoly
поэтому вопрос, кто вас научил трактовать массив как указатель?
Anatoly
назови фамилию и за ним придут
Anatoly
Anatoly
ну, тогда это твоя проблема
Александр
Mikhail
по поводу std::array согласен абсолютно. но мы про int arr[]
Tom
+
Culminate
https://habrahabr.ru/post/251091/
Александр
Как минимум, массив на стеке - просто кучка значений, адрес которой явно нигде не сохранен и не занимает места. А реальный указатель обычно где-то валяется (в регистре, на стеке)
Nikita
как можно определить, выполнился constexpr во время компиляции или в рантайме?
Nikita
о, точно, спасибо
Александр
Присвоить constexpr переменной
Culminate
тогда уж #readme
Evgenii
cppreference
Nikita
Nikita
если присвоить constexpr переменной то гарантирует что в рантайме?
Ioann_
Я бы сказал в духе С++ - фальш :)