【问题标题】:C++ char * const vs char *, why sometimes one sometimes the otherC++ char * const vs char *,为什么有时一个有时另一个
【发布时间】:2012-05-21 20:26:24
【问题描述】:

在使用结构项时:

struct item
{
    item();
    ~item();
    char * name;
    char * effect1;
    char * effect2;
    char * effect3;
    char * effect4;
    int count;
};

使用构造函数:

item::item()
{
    name = NULL;
    effect1 = NULL;
    effect2 = NULL;
    effect3 = NULL;
    effect4 = NULL;
    count = 0;
}

悬停在名称上显示:

char* name() const

将鼠标悬停在任何效果显示上时:

char* effectx

我想知道为什么会发生这种情况,因为我认为这种差异导致我在程序的其他领域出现问题。谢谢。

【问题讨论】:

  • 你说你“hover over name”。当您将鼠标悬停在名称上时,您使用的是什么程序?代码编辑器?一个IDE?哪一个?
  • 听起来就像系统中的一个怪癖。你有没有叫name()的函数?
  • const char* 如果所有名称都直接作为字符串文字 ("somecaption") 给出,则有意义,否则您应该使用惯用的 C++ 替代方案,它既不是 char* 也不是 const char*,而是 @ 987654331@.
  • 旁白:“item 除了 item() 和 ~item 之外没有其他成员函数。”。你违反了Rule of Three
  • 听起来你的 IDE 有问题。它可能将您的成员 name 与另一个类的成员函数混为一谈,该类的成员函数声明为 char* name() const

标签: c++ pointers char constants


【解决方案1】:

我不认为您提供的声明与 IDE 看到的代码完全相同。解决问题的一种好方法是将代码复制到单独的工作文件中(在单独的项目中)并将所有代码(声明和显示问题的示例代码)移动到同一个文件中。然后删除代码中不相关的部分,以便您慢慢转向最小、最简洁的示例,该示例仍然显示您的问题。

然后将该代码发布为您问题的更新。

同时,您没有完全正确地定义您的构造函数。嗯,这是正确的,但不是最好的风格。不要在构造函数的主体中初始化成员,像这样初始化它们:

item::item()  : 
 name(NULL), effect1(NULL), effect2(NULL), effect3(NULL), effect4(NULL), count(0)
{
  /* nothing in the body. */
}

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 2010-10-27
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2014-02-15
    相关资源
    最近更新 更多