所以我的问题很简单(希望如此)。我现在有一个类,它的构造函数如下所示:
Constructor(String szName)字符串将保存一个名称;这可能是多个部分。所以约翰,约翰史密斯,约翰H史密斯,都必须是有效的输入。我知道我可以做以下几件事:
std::string input;
getline(cin, input);
myClass Foo(input);一切都会好的。但是,我是否可以直接将getline输入发送给构造函数?
谢谢你提前提供帮助。
发布于 2013-08-19 17:11:03
好吧,如果你不介意做另一个功能,你可以这样做:
std::string readLine()
{
std::string input;
getline(cin, input);
return input;
}然后初始化类,如下所示:
myClass Foo(readLine());发布于 2013-08-19 17:21:30
这样做是没有意义的。这只是语义糖,因为字符串仍然需要存储相同数量的内存。如果您担心在更大的代码块中添加额外的变量会增加内存使用量,则可以使用{}包围getline调用,如下所示:
{
string input;
getline(cin, input);
myClass Foo(input);
}这个变量将只存在于这样的块中。但是这样做并没有太大的好处(至少对于这样简单的代码来说不是这样)。
发布于 2013-08-19 17:45:32
如果您真的想避免不必要的副本,那么您应该将Constructor(String szName)变成Constructor(const String& szName) -这样,您就可以避免在将字符串复制到构造函数的过程中(您可能需要在构造函数中复制它)。
在某种程度上,您将需要将来自getline的输出存储在字符串中(除非您碰巧希望编写返回字符串的自己的getline,但这仍然无助于避免复制,而不是基本的):
std:string str;getline(cin,str);myClass foo(str);
实际上,使用返回字符串的函数可能会导致另一个副本(但编译器可能会删除该额外副本)。
https://stackoverflow.com/questions/18319282
复制相似问题