以下是可能的重复问题:char **隐式转换为const char **
为什么当
我已经阅读了C++标准的4.4节,但它只让我更加困惑。
给定以下代码:
void foo( const char ** buffer );
void bar()
{
char * buffer;
foo( &buffer );
}
为什么当
foo()
函数有一个const char *
参数时,编译器在将char *
变量传递给它时不会抱怨?但是对于使用char **
,它不能将其转换为const char **
?编译器在前一种情况下添加任何const
限定符吗?我已经阅读了C++标准的4.4节,但它只让我更加困惑。
foo(const_cast<const char **>(&buffer));
应该可以工作。对我来说很奇怪,但标准允许const_cast
在任何方向上转换具有不同 cv 限定符的类型。因此,您可以通过它删除或添加const
限定符。 - 23W