标签: c++
std::strtol的签名如下:
std::strtol
long strtol(const char *str, char **str_end, int base);
我实际上希望第二个参数是const char**类型。有关为什么它是char**类型的任何解释?请注意,可以修改const char**类型的变量。您无法修改的是char* const *变量。
const char**
char**
char* const *
答案 0 :(得分:9)
在昔日的日子里(在C90之前),C没有const的概念,一切都使用了char*。
const
char*
由于char*可以隐式转换为char const*,因此更改大多数库函数的签名以支持const并不是太多问题。但char**无法转换为char const**,请参阅C ++标准中的以下注释以了解原因
char const*
char const**
由于C不支持重载,委员会必须在破坏遗留代码或强迫每个人传入char**之间做出选择。两者都不理想,但看起来他们选择后者。