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 或 NULL0,如果您没有 C++11。 0L 令人困惑。 【参考方案1】:

C++ 允许将任何类型 TT* 隐式转换为 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 * 之间的转换 [关闭]

char* const char*和string之间的转换

(const_cast<char*> 和没有之间有啥区别?

“const char *”和“const string”之间的确切技术区别是啥

const char**与char**之间赋值问题

[转载] C++ string, const char*, char* 之间互相转换