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

C++ 使用getline将字符串传递给对象,而不使用额外的字符串变量,c++,getline,C++,Getline,所以我的问题很简单(我希望如此)。我当前有一个类,其构造函数如下所示: Constructor(String szName) std::string readLine() { std::string input; getline(cin, input); return input; } 字符串将包含一个名称;这可能不止一部分。所以John,John Smith,John H Smith,都必须是有效的输入。我知道我可以做到以下几点: std::string input

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

Constructor(String szName)
std::string readLine()
{
    std::string input;
    getline(cin, input);
    return input;
}
字符串将包含一个名称;这可能不止一部分。所以John,John Smith,John H Smith,都必须是有效的输入。我知道我可以做到以下几点:

std::string input;

getline(cin, input);
myClass Foo(input);
它会很好的工作。但是,我是否可以直接将getline输入发送到我的构造函数


提前谢谢你的帮助

好吧,如果你对制作另一个函数没问题,你可以这样做:

Constructor(String szName)
std::string readLine()
{
    std::string input;
    getline(cin, input);
    return input;
}
然后初始化类,如下所示:

myClass Foo(readLine());

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

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

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

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

以某种方式,您需要将
getline
的输出存储在一个字符串中(除非您碰巧希望编写自己的
getline
以返回一个字符串,但这仍然无助于避免复制基本的:

std::字符串str; getline(cin,str); myClass-foo(str)


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

是的。很抱歉,但不是这样。不要抱歉,只需编辑问题:)这将很好,尽管它仍然需要我创建另一个字符串变量。假定该变量会很快超出范围。但我希望有一种方法可以在不创建新变量的情况下完成。无论如何,谢谢你的帮助。这将非常好用。琳娜,这只是为了满足我自己的OCD。但是谢谢你的帮助救命啊。