170 похожих чатов

Приветствую, друзья у меня есть некоторая функция foo, которая не изменяет

переданный массив:
void foo(const uint8_t *array_ptr, uintptr_t len);

насколько идиоматично указать в сигнатуре const для указателя и параметра len?
void foo(const uint8_t *const array_ptr, const uintptr_t len);

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

24 ответов

22 просмотра

этот конст ни на что не влияет, только лишь не позволит тебе внутри функции менять значение параметров

О поведении функции вобще ничего не говорит

Холиварная тема, примерно на уровне "а где ставить звёздочку" и "переносить ли скобку". Ответ аналогичный - зависит от принятых в команде соглашений

Для указателя - идеоматично, для второго параметра размера - нет.

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

Alexander Karaev
Холиварная тема, примерно на уровне "а где ставить...

Вдогонку к const-методам, возвращающим void (без output аргументов).

В объявлении не надо писать, например Resharper подчеркивает и предлагает удалить. Я так и не понял почему Но при этом в опрелелении — стоит поставить const, потому что все переменные по умолчанию должны быть const

Danya🔥
В объявлении не надо писать, например Resharper по...

Потому что в объявлении это бесполезная инфа - оно для вызывающего, а ему пофиг на твой const. Получается мусорный код

Seer Iλusha-::<Vennik, E16> Автор вопроса
Danya🔥
В объявлении не надо писать, например Resharper по...

вот да. как бы после раста хочется иммутабельным делать всё что можно. вопрос как раз был насколько это идеологично со стороны C)

Seer Iλusha ::<Vennik, E16>
вот да. как бы после раста хочется иммутабельным д...

кто-нибудь может мне пояснить эту идеологию с иммутабельностью?

Seer Iλusha ::<Vennik, E16>
вот да. как бы после раста хочется иммутабельным д...

const, к сожалению, не гарантирует иммутабельность

myrrc Кот
const, к сожалению, не гарантирует иммутабельность

"Полное спокойствие может дать человеку только страховой полис" (с) Остап Бендер

myrrc Кот
const, к сожалению, не гарантирует иммутабельность

Гарантирует. Вернее, будет ub если нарушишь

Kirill Bolshakov
Гарантирует. Вернее, будет ub если нарушишь

Нет, не гарантирует, потому что у тебя одновременно могут существовать мутабельный и не мутабельный указатель на данные (я не говорю про const_cast, если что)

Seer Iλusha ::<Vennik, E16>
вот да. как бы после раста хочется иммутабельным д...

Со стороны С всё не очень, там куча легаси, которое не уважает const. А вот в С++ рекомендуется херачить const по дефолту (кроме пары случаев)

myrrc Кот
Нет, не гарантирует, потому что у тебя одновременн...

При чем тут указатель? Если у тебя объект константный, то ты на него не сможешь взять указатель, который сможет его изменить

Kirill Bolshakov
При чем тут указатель? Если у тебя объект констант...

Речь шла про сигнатуру функции, принимающей указатель на константные данные. Так вот, на самом деле, ничего не гарантирует, что данные действительно константные.

myrrc Кот
Речь шла про сигнатуру функции, принимающей указат...

Ну дак это правильно, потому что это разные гарантии. Чтобы гарантировать неизменяемость, надо создавать const объект

Kirill Bolshakov
Ну дак это правильно, потому что это разные гарант...

Абсолютно верно про const объект, но имхо люди эти гарантии часто путают

Seer Iλusha ::<Vennik, E16>
вот да. как бы после раста хочется иммутабельным д...

Это нормально C++ Core Guidelines даже рекомендуют сложную инициализацию выносить в immediately invoked lambda expression, чтобы переменную можно было сделать const

Danya🔥
Это нормально C++ Core Guidelines даже рекомендуют...

внутри лямбды всё равно будут не const переменные)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта