将字符串文字传递给函数并分配给成员变量

时间:2012-03-05 07:16:06

标签: c++ string function

这可能是一个新手问题,但我无法解决这个问题。我可以单独解决前一个或后一个问题,但不能同时解决。

我有一个带有字符串成员的类,以及一个设置它的函数。我想将一个文字传递给函数。

class Profiler
{
private:
    std::string description;
    //snip

public:
    //snip
    void startJob(const std::string &desc);
};

void Profiler::startJob(const string &desc) {
    //snip
    description = desc;
}

我希望(实际上需要)像这样使用它:

profiler.startJob("2 preprocess: 1 cvConvertScale");

问题是:

  • 如何将字符串文字传递给函数?答案我可以找到:传递值或通过const指针或const引用传递它。我不想通过值传递它,因为它很慢(毕竟它是一个分析器,精确到微秒)。 const指针/引用给出了编译器错误(或者我做错了什么?)

  • 如何将其分配给成员函数?我能找到的唯一解决方案是使成员变量成为指针。使它成为非指针赋予错误“字段'描述'具有不完整类型”(wtf是否意味着?)。将它作为指针不起作用,因为它将const分配给非const。只有一个const指针/引用似乎可以工作。

1 个答案:

答案 0 :(得分:1)

按引用传递,按值存储,包括标题:

#include <string>

class Profiler {
  private:
    std::string description;
    //snip

  public:
    //snip
    void startJob(const std::string &desc);
};

void Profiler::startJob(const string &desc) {
  //snip
  description = desc;
}

按值存储是o.k.只要你不修改原始字符串。如果你不这样做,他们将共享内存,并且不会有低效的副本。在这种情况下,你将把字符复制到由std :: string控制的缓冲区。

我认为不可能将指向literal-char *的指针存储为std :: string的实例,尽管它可能是o.k.存储char *指针。