c++ - 为什么 argc 不是常量?

标签 c++ constants program-entry-point argc effective-c++

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 放在 argcargv 上不会有太大作用,而且它会使一些老式的编程实践失效,例如:

// print out all the arguments:
while (--argc)
    std::cout << *++argv << std::endl;

我已经用 C 语言编写过这样的程序,而且我知道我并不孤单。我从某处复制了该示例。

关于c++ - 为什么 argc 不是常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35734267/

相关文章:

vb.net - 如何在 VB 中定义 64 位常量?

gcc - C/C++编译器(例如GCC)是否通常以2的幂次幂来优化模数?

c++ - 对 vector 中的增量值

c++ - LoopF​​illZerobss 具有对 main 的 undefined reference

c++ - qmail-inject 返回 111

c++ - C++ 中的抽象工厂

c++ - 如何使用断言对数组进行测试?

C++:非临时 const 引用

c++ - 如何在 C++ 中构建非静态入口点?

无法使用字符串将 'main' 转换为 'void' 函数