Верхний уровень const
формального аргумента не является частью типа функции. Вы можете добавить или удалить его по своему усмотрению: он влияет только на то, что вы можете делать с аргументом в реализации функции.
Так что argc
вы можете свободно добавлять const
.
Но ведь argv
вы не можете создать символьные данные, const
не изменив тем самым сигнатуру функции. Это означает, что тогда это не одна из стандартных main
сигнатур функции, и ее не нужно будет распознавать как main
функцию. Итак, не лучшая идея.
Хорошая причина не использовать стандартные main
аргументы в программах, не являющихся игрушечными, заключается в том, что в Windows они не могут представлять фактические аргументы программы, такие как имена файлов с международными символами. Это потому, что в Windows они очень строго кодируются как Windows ANSI. В Windows вы можете реализовать еще несколько переносимых средств доступа к аргументам в терминах GetCommandLine
функции API.
Подводя итог, ничто не мешает вам добавлять const
к argc
, но самый полезный const
-ness на argv
даст вам нестандартную main
функцию, скорее всего , не признаются в качестве таковых. К счастью (по иронии судьбы), есть веская причина не использовать стандартные main
аргументы для переносимого серьезного кода. Проще говоря, для практических целей они поддерживают только старый ASCII, содержащий только буквы английского алфавита.
argc
какconst
.