char * 和 const char * 之间的转换 [关闭]
Posted
技术标签:
【中文标题】char * 和 const char * 之间的转换 [关闭]【英文标题】:conversion between char * and const char * [closed] 【发布时间】:2014-10-23 10:42:10 【问题描述】:Fl_Widget 有下一个构造函数:
Fl_Widget (int x, int y, int w, int h, const char *label=0L)
如何发送 char* 而不是 const char*?我只想在构造函数中使用我的 char Tmp[255] 变量。
【问题讨论】:
刚刚发送。一个const char*
参数可以接收一个char*
。
您尝试发送它吗? char*
(因此char[255]
)可转换为const char*
。
还有0L
?使用 nullptr
@deviantfan 或 NULL
或 0
,如果您没有 C++11。 0L
令人困惑。
【参考方案1】:
C++ 允许将任何类型 T
的 T*
隐式转换为 const T*
,因此在您的情况下,您只需将参数传递给函数。
此外,如果您拥有 Fl_Widget
构造函数,则应将 label
的默认值从 0L
更改为 nullptr
,如果使用 C++03 或更早版本,则应更改为 0
。
(从const T*
转换为T*
需要const_cast
并且可能导致未定义的行为)。
【讨论】:
一般来说const
总是可以隐式添加,但如果没有const_cast
就不能删除,基本上不应该使用。【参考方案2】:
如果您的 ctor 当前看起来像这样,foo
是您的班级:
foo::foo() : FL_Widget(13, 13, 13, 13, Tmp)
char Tmp[255]"blah blah blah";
这是不合法的。您不能将参数传递给发生在您的类的 ctor 中的父 ctor,这是因为父 ctor 发生在您的类 ctor 被调用之前。
您可以改为这样做:foo::foo() : FL_Widget(13, 13, 13, 13, "blah blah blah")
【讨论】:
以上是关于char * 和 const char * 之间的转换 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
char * 和 const char * 之间的转换 [关闭]