Преимущества константы в C++? [дубликат]

=ARRAYFORMULA({0; ROW(A1:A100)&0})

или:

=ARRAYFORMULA({0\ ROW(A1:A100)&0})

, если вам нужны действительные числа, используйте:

[ 112]

или:

=ARRAYFORMULA({0\ VALUE(ROW(A1:A100)&0)})

13
задан Keith Pinson 28 January 2013 в 16:47
поделиться

6 ответов

Константа особенно полезна с указателями, или ссылки передали функции - это - немедленно понятный "контракт API", своего рода, что функция не изменит переданный объект.

См. также: http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.4

10
ответ дан 1 December 2019 в 19:51
поделиться

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

void f(Foo &foo, const Bar &bar) { ... }

В этом случае вызывающая сторона будет знать что foo мог бы быть изменен, но bar не будет. Компилятор осуществит это при компиляции тела f(), так, чтобы bar никогда не изменяется и никогда не передается другой функции, которая могла бы изменить его.

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

9
ответ дан 1 December 2019 в 19:51
поделиться

Кажется довольно очевидным - это мешает Вам изменять вещи, которые не должны быть изменены.

Править: для большего руководства всегда обращайтесь к Herb Sutter.

6
ответ дан 1 December 2019 в 19:51
поделиться

Я не так убежден на аспекте "безопасности" константы (существуют за и против).... однако, что это действительно позволяет, определенный синтаксис, что Вы не можете обойтись без константы

void blah(std::string& x)
{}

может только взять станд.:: строковый объект... Однако, если Вы объявляете это константа:-

void blah(const std::string& x) {}

можно теперь сделать

blah("hello");

который вызовет соответствующего конструктора для создания станд.:: строка

5
ответ дан 1 December 2019 в 19:51
поделиться

Кроме того, при помощи константы Вы заявляете свое намерение для использования переменной или параметра. Это - хорошая практика программирования ("C/C ++ Coding Style & Standards", объект 2.3).

Также путем избегания использования #define для определения констант и использования константы Вы увеличиваете безопасность типов своего кода. Инструкции по Практике программирования на C++ - объект 2.1

4
ответ дан 1 December 2019 в 19:51
поделиться

Аспект контракта константы также важен для оптимизатора компилятора. С определенными объявлениями константы оптимизация, включающая инварианты цикла, легче для оптимизатора определить. Поэтому const_cast действительно опасен.

-1
ответ дан 1 December 2019 в 19:51
поделиться
Другие вопросы по тегам:

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