2013-08-19 27 views
3

所以我的问题很简单(我希望)。我目前有一个构造类的类看起来像这样:使用getline将字符串传递给对象而不使用额外的字符串变量

Constructor(String szName) 

该字符串将持有一个名称;这可能是更多的一部分。所以约翰,约翰史密斯,约翰史密斯,都必须是有效的投入。我知道我可以做到以下几点:

std::string input; 

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

它会正常工作。但是,无论如何,直接将getline输入发送给我的构造函数吗?

非常感谢您提前给予的帮助。

+0

是的。对不起。 –

+1

不要对不起,只是编辑问题:) – jrok

回答

3

好吧,如果你是用细做其他功能,你可以做这样的:

std::string readLine() 
{ 
    std::string input; 
    getline(cin, input); 
    return input; 
} 

然后初始化类像这样:

myClass Foo(readLine()); 
+0

这将工作正常,但它仍然需要我创建另一个字符串变量。当然,变量会很快超出范围。但我希望有一种方法可以在不创建新变量的情况下实现。还是要谢谢你的帮助。这将很好地工作 –

1

有中没有点这样做。这将只是语义糖,因为字符串仍然需要相同的内存容量来存储。如果您担心的代码块较大的具有附加变量将提高内存的使用,你可以与周围{}函数getline电话如下:

{ 
    string input; 
    getline(cin, input); 
    myClass Foo(input); 
} 

和变量会存在只有这样的块内。但是这样做没有什么大的优势(至少不是这么简单的代码)。

+0

娜,它只是为了满足我自己的强迫症。但是谢谢你的帮助。 –

0

如果你真的想避免不必要的副本,那么你应该将Constructor(String szName)转换为Constructor(const String& szName) - 这样,你可以避免字符串被拷贝到构造函数的路上(你可能需要在构造函数中拷贝它)。

在这种或那种方式,你需要从getline输出存储在一个字符串(除非你想编写自己的getline返回一个字符串,但仍然不能避免拷贝任何不是更基本:

的std ::字符串str; 函数getline(CIN,STR); MyClass的富(STR);

事实上,使用返回字符串的函数可能会导致另一个副本(但是编译器将可能摆脱多余的副本)

相关问题