这可能是一个新手问题,但我无法解决这个问题。我可以单独解决前一个或后一个问题,但不能同时解决。
我有一个带有字符串成员的类,以及一个设置它的函数。我想将一个文字传递给函数。
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指针/引用似乎可以工作。
答案 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 *指针。