【问题标题】:conversion between char * and const char * [closed]char * 和 const char * 之间的转换 [关闭]
【发布时间】: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 令人困惑。

标签: c++ fltk


【解决方案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"){}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2013-04-23
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多