首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用getline将字符串传递给对象,而不使用额外的字符串变量。

使用getline将字符串传递给对象,而不使用额外的字符串变量。
EN

Stack Overflow用户
提问于 2013-08-19 17:06:53
回答 3查看 1.3K关注 0票数 3

所以我的问题很简单(希望如此)。我现在有一个类,它的构造函数如下所示:

代码语言:javascript
复制
Constructor(String szName)

字符串将保存一个名称;这可能是多个部分。所以约翰,约翰史密斯,约翰H史密斯,都必须是有效的输入。我知道我可以做以下几件事:

代码语言:javascript
复制
std::string input;

getline(cin, input);
myClass Foo(input);

一切都会好的。但是,我是否可以直接将getline输入发送给构造函数?

谢谢你提前提供帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-19 17:11:03

好吧,如果你不介意做另一个功能,你可以这样做:

代码语言:javascript
复制
std::string readLine()
{
    std::string input;
    getline(cin, input);
    return input;
}

然后初始化类,如下所示:

代码语言:javascript
复制
myClass Foo(readLine());
票数 3
EN

Stack Overflow用户

发布于 2013-08-19 17:21:30

这样做是没有意义的。这只是语义糖,因为字符串仍然需要存储相同数量的内存。如果您担心在更大的代码块中添加额外的变量会增加内存使用量,则可以使用{}包围getline调用,如下所示:

代码语言:javascript
复制
{
  string input;
  getline(cin, input);
  myClass Foo(input);
}

这个变量将只存在于这样的块中。但是这样做并没有太大的好处(至少对于这样简单的代码来说不是这样)。

票数 1
EN

Stack Overflow用户

发布于 2013-08-19 17:45:32

如果您真的想避免不必要的副本,那么您应该将Constructor(String szName)变成Constructor(const String& szName) -这样,您就可以避免在将字符串复制到构造函数的过程中(您可能需要在构造函数中复制它)。

在某种程度上,您将需要将来自getline的输出存储在字符串中(除非您碰巧希望编写返回字符串的自己的getline,但这仍然无助于避免复制,而不是基本的):

std:string str;getline(cin,str);myClass foo(str);

实际上,使用返回字符串的函数可能会导致另一个副本(但编译器可能会删除该额外副本)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18319282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档