Intereting Posts
Как получить внутренний IP-адрес, внешний IP-адрес и стандартный шлюз для UPnP Порядок разрешения операндов C и C ++ Пример кода C, который демонстрирует неустойчивость при parsingке? Рекурсия и связанные списки в C Как читать в текстовом файле целых чисел с разделителями табуляции в C? kbhit () с двойной петлей не работает хорошо Является ли преобразование из unsigned в unsigned? Предупреждать, если другое имя типа typedef’d используется в списке аргументов C распечатать и сохранить аргумент командной строки круглым способом Флаги по умолчанию для gcc-компилятора в Eclipse waitpid, wnohang, wuntraced. Как использовать эти Сон () встроенный вызов сборки работает, но генерирует проверку выполнения во время выполнения Копирование структуры в C с назначением вместо memcpy () Когда память выделена локальным переменным в C В чем разница между выходом (0) и выходом (1) в C?

Верно ли, что (const T v) никогда не требуется в C?

Например:

void func(const int i); 

Здесь const не требуется, поскольку все параметры передаются по значению (включая указатели).

Это правда?

Все параметры в C действительно передаются по значению, а это означает, что фактический аргумент не изменится независимо от того, включаете ли вы эту const или нет.

Однако это не означает, что const здесь «никогда не требуется». Независимо от того, нужно ли это или нет, зависит от того, чего вы хотите достичь.

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

Существует довольно популярное (и довольно разумное) руководство по кодированию, в котором говорится, что функциональные параметры никогда не должны изменяться внутри функции, т. Е. Что в любой момент выполнения функции все параметры должны сохранять свои исходные значения. В соответствии с этим руководством на самом деле имеет смысл всегда включать этот const во все объявления параметров.

const используется только прекомпилером, чтобы заметить об ошибках …

Обратите внимание, что это совершенно верно:

 void foo( const char * bar ) { char * baz = ( char * )bar; baz++; } 

Поэтому он никогда не нужен, но он просто делает код более удобочитаемым и сообщает, что указатель никогда не должен меняться …