签名std :: strtol

时间:2015-12-17 06:32:51

标签: c++

std::strtol的签名如下:

long strtol(const char *str, char **str_end, int base);

我实际上希望第二个参数是const char**类型。有关为什么它是char**类型的任何解释?请注意,可以修改const char**类型的变量。您无法修改的是char* const *变量。

1 个答案:

答案 0 :(得分:9)

在昔日的日子里(在C90之前),C没有const的概念,一切都使用了char*

由于char*可以隐式转换为char const*,因此更改大多数库函数的签名以支持const并不是太多问题。但char**无法转换为char const**,请参阅C ++标准中的以下注释以了解原因

enter image description here

由于C不支持重载,委员会必须在破坏遗留代码或强迫每个人传入char**之间做出选择。两者都不理想,但看起来他们选择后者。