int main( const int argc , const char[] const argv)
如Effective C++ Item#3 指出“尽可能使用 const”,我开始思考“为什么不让这些‘常量’参数 const
”?
程序中是否存在修改argc
值的场景?
最佳答案
在这种情况下,历史是一个因素。 C 将这些输入定义为“不恒定”,并且与(大部分)现有 C 代码兼容是 C++ 的早期目标。
某些 UNIX API,例如 getopt
,实际上会操作 argv[]
,因此不能将其设为 const
还。
(旁白:有趣的是,尽管 getopt
的原型(prototype)表明它不会修改 argv[]
但可能会修改指向的字符串,Linux man page 表明 getopt
排列其参数,并且 it appears they know they're being naughty 。Open Group 的手册页没有提及这种排列。)
将 const
放在 argc
和 argv
上不会有太大作用,而且它会使一些老式的编程实践失效,例如:
// print out all the arguments:
while (--argc)
std::cout << *++argv << std::endl;
我已经用 C 语言编写过这样的程序,而且我知道我并不孤单。我从某处复制了该示例。
关于c++ - 为什么 argc 不是常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35734267/