【问题标题】:Implicit conversion regarding constness in c++关于 c++ 中 const 的隐式转换
【发布时间】:2016-12-26 02:37:56
【问题描述】:
#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* 吗?

【问题讨论】:

  • 我重新打开了这个问题,因为它询问的是隐式转换,而不是区别。

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


【解决方案1】:

是的。它被称为qualification conversions(隐式转换之一):

(强调我的)

指向 cv 限定类型 T 的类型指针的纯右值可以转换为指向 更多 cv 限定相同类型 T 的纯右值指针(换句话说,可以添加 constness 和易变性)。

“更多” cv-qualified 表示

指向非限定类型的指针可以转换为指向 const 的指针;
...

这意味着char* 可以隐式转换为const char*

指针本身的const限定符在这里无关紧要,参数keke本身被声明为按值传递,从haha复制的参数就可以了(即const指针; char* const)。

【讨论】:

  • 函数调用中是否存在隐含转换?it's fine in passed by value...
  • @Jichao 你的意思是从char* constchar*?没有。
  • 在函数调用中,char* constchar *不需要进行类型匹配?
  • @Jichao 想想const int ci = 1; int i = ci;,他们是一样的。
  • @Jichao IMO 我们不说转换,我们说赋值,比如可以将char* 赋值给char* const,或者将char* const 赋值给char*
猜你喜欢
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
相关资源
最近更新 更多