【发布时间】:2016-11-08 00:52:56
【问题描述】:
在C++ in Plain English, Second Edition(1999 年)中,书中有一节说“=”可用于在调用正确的构造函数时进行初始化。就像给定一个类 CStr 和一个构造函数 CStr(char*),这本书是这样说的:
同样,最终声明调用构造函数CStr(char*):
CStr name3 = "Jane Doe";
我想用std::string 构造函数尝试同样的事情。我的部分测试代码是这样的:
using namespace std;
class CStr {
private:
string name;
public:
CStr(string s): name(s) {}
};
int main() {
CStr name3 = "Jane Doe";
}
但是,当我编译时,我在 name3 初始化中遇到错误:
“请求从 'const char [9]' 转换为非标量类型 'CStr'”。
为什么将 CStr::name 初始化为字符串 s = "Jane Doe" 不起作用?像string nameTest{"Jane Doe"}; 这样的字符串测试有效,所以我认为这也可以。也许这本书很旧(这是我现在唯一的一本书),但我认为错误更多的是我自己。
【问题讨论】:
-
顺便说一句,自 99 年以来,C++ 发生了很大变化。从那时起,两个新标准发布了,它们添加了大量新功能并删除了一些过时的功能。
-
实际上,我的桌子上还有那本书的副本。非常有用的书,可作为 C 标准库的快速参考。
-
顺便说一句,您可以将字符串文字与
CStr(char *)构造函数一起使用的时代已经一去不复返了。字符串文字不再可转换为char *类型,只能转换为const char *。
标签: c++ string initialization