Верхний уровень 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.