【发布时间】:2009-10-30 20:30:59
【问题描述】:
注意:我知道有很多问题都在讨论这个问题,但我还是个初学者,看不懂这些例子。
我得到了一个这样的函数原型:
int someFunction(const char * sm);
这里,如您所知,const char* 表示该函数可以接受 const 或非 const 指向 char 的指针。我在函数体中尝试了类似的东西:
someMemberVar = sm;
someMemberVar 只是一个指向字符的指针。编译器给我一个错误告诉我: 无法从 const char* 转换为 char*。
在这里,我没有传递常量,因此 sm 或 someMemberVar 都不是常量。那么,编译器在说什么常量呢?
【问题讨论】:
-
someMemberVar究竟是如何声明的,你得到的确切错误信息是什么(你提供的错误信息没有任何意义,所以我怀疑那里有错字)。跨度> -
我修正了我的错误。它是这样声明的:char * someMemberVar;
-
@Alan 他基本上是正确的。 char* 可以安全地转换为 const char*,因此您可以像传递 const char* 一样将 char* 传递给该方法。编译器只会为你做演员。
-
@Alan:不,它可以接受 const char * 或 char *。它会将它们视为 const char *。您需要显式转换才能将 const 数据类型更改为非 const 数据类型,而不是另一种方式。毕竟,仅仅因为一个变量可以被写入并不意味着我必须改变它的值。
-
虽然出于其他原因您需要了解此处发生的情况,但您可能想要的真正解决方案是将
someMemberVar设置为std::string。尤其是当您学习语言的基础知识时,保存值的变量(如 int、string 等)更易于使用。在你学会了这门语言之后,它们仍然更容易使用(因为你/想要/大部分时间都持有一个值)。