我正在处理一个必须返回类型向量的问题。我知道向量的大小正好是2。有没有一种方法可以以向量的形式返回值,而不必创建一个新的向量变量并返回它?我试过下面的方法,但是不起作用。还有花括号和直括号。
vector<int> foo() { return <1,2>; }
jvlzgdj91#
如果你使用C++11或更高版本,只需写:
vector<int> foo() { return {1,2}; }
{1, 2}将被推导为一个initializer_list,并且它不会导致复制,因为我们有"复制省略"。因为它没有名称,这也被称为"返回值优化"。您可以在中看到:https://en.cppreference.com/w/cpp/language/copy_elisionhttps://en.cppreference.com/w/cpp/utility/initializer_list
{1, 2}
ars1skjm2#
有没有一种方法可以以向量形式返回值,而无需创建新的向量变量并返回该变量?您已经通过值返回,根据定义,该值包含复制。如果您希望避免复制,可以尝试通过引用返回。现在,对于C++11及以后的版本,我们应该将尖括号<>替换为大括号{},如下所示:
<>
{}
//vvvvvvvvvvv------------------>You're returning by value! vector<int> foo() { //---------vvvvv------------->changed <> to {} return {1,2}; }
2条答案
按热度按时间jvlzgdj91#
如果你使用C++11或更高版本,只需写:
{1, 2}
将被推导为一个initializer_list,并且它不会导致复制,因为我们有"复制省略"。因为它没有名称,这也被称为"返回值优化"。您可以在中看到:https://en.cppreference.com/w/cpp/language/copy_elisionhttps://en.cppreference.com/w/cpp/utility/initializer_list
ars1skjm2#
有没有一种方法可以以向量形式返回值,而无需创建新的向量变量并返回该变量?
您已经通过值返回,根据定义,该值包含复制。如果您希望避免复制,可以尝试通过引用返回。
现在,对于C++11及以后的版本,我们应该将尖括号
<>
替换为大括号{}
,如下所示: