关于c ++中constness的隐式转换

时间:2016-08-19 03:03:38

标签: c++ type-conversion const implicit-conversion

#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*吗?

1 个答案:

答案 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)。