我很难理解为什么C++的行为比C更加“放松”,当涉及到解释和为函数的参数创建类型。C抱怨通过char **值传递给char const * const * const函数,但C++不会
C是世界上最简单的事情,它坚持你写的东西,就是这样,C++另一方面是以一种扭曲的方式运行,我无法真正理解。
例如流行argv
传递给函数时,这是一个char* []
变得char**
,我真的不知道为什么,我的期望和“希望”是char * const *
,但我得到这个行为来代替。
您还可以阅读this article in PDF谈到有关C和C之间的这种差异++,文章还用这句话结束:
虽然C++确定功能签名时忽略顶级CV-预选赛参数 声明,它不会 完全忽略那些cv-qualifiers。
由于我在网上找不到这个问题(嵌入式系统编程 - 2000年2月,这个老问题是免费的),我想知道这个短语可能意味着什么。
有人可以解释为什么这种行为是在C++中的方式?
编辑:
我的一个例子是
#include <stdio.h>
void foo(int argc, const char *const *const argv) {
printf("%d %s\n", argc, argv[0]);
}
int main(int argc, char *argv[]) {
foo(argc, argv);
return (0);
}
,如果你编译这个与gcc 4.8.1
你得到预期的错误
gcc cv_1.c
cv_1.c: In function ‘main’:
cv_1.c:8:3: warning: passing argument 2 of ‘foo’ from incompatible pointer type [enabled by default]
foo(argc, argv);
^
cv_1.c:3:6: note: expected ‘const char * const* const’ but argument is of type ‘char **’
void foo(int argc, const char *const *const argv) {
^
这种输出使得隐含的事实, argv
被解释为char**
你的argv的例子实际上是C++继承C.你的PDF会谈约*签名的东西*,它们仅用于重载分辨率。与简历检查没有任何关系。 –
@HansPassant对于我所关心的,如果这个机制存在于顶层,它仍然会抛弃我的'const',并且我想知道这个怪异行为背后的原因是什么。在这个例子中'argv'只是一个玩具。 – user2485710
请用一个具体的例子来幽默我们。 –