#include <iostream>
int foo(const char* keke) {
std::cout << keke;
return 0;
}
int main()
{
char* keke = new char(10);
char* const haha = keke;
return foo(haha);
}
编译上述代码时为什么没有任何错误/警告?
haha
的类型为char* const
,而foo
仅接收const char*
类型的参数。可以char* const
隐式转换为const char*
吗?
答案 0 :(得分:4)
是。它被称为qualification conversions(其中一个隐式转换):
(强调我的)
指向cv限定类型T的类型指针的prvalue可以转换为指向更多cv-qualified 相同类型T的prvalue指针(换句话说,可以添加constness和volatility)。
“更多”cv-qualified表示
指向非限定类型的指针可以转换为指向const的指针;
...
这意味着char*
可以隐式转换为const char*
。
const
限定符在这里无关紧要,参数keke
本身被声明为按值传递,从haha
复制的参数很好(即const
指针; char* const
)。