当前位置: 首页 > 编程笔记 >

c++命名的返回值省略

燕博文
2023-03-14
本文向大家介绍c++命名的返回值省略,包括了c++命名的返回值省略的使用技巧和注意事项,需要的朋友参考一下

示例

如果从函数返回左值表达式,则此左值:

  • 表示该函数局部的自动变量,将在 return

  • 自动变量不是函数参数

  • 并且变量的类型与函数的返回类型相同

如果所有这些都成立,那么可以取消从左值的复制/移动:

std::string func()
{
  std::string str("foo");
  //做东西
  return str;
}

更复杂的情况适合进行省略,但情况越复杂,编译器实际淘汰它的可能性就越小:

std::string func()
{
  std::string ret("foo");
  if(some_condition)
  {
    return "bar";
  }
  return ret;
}

编译器仍然可以忽略ret,但是这样做的机会降低了。

如前所述,值参数不允许省略。

std::string func(std::string str)
{
  str.assign("foo");
  //做东西
  return str; //不可能省略
}
           

 类似资料:
  • 本文向大家介绍C++ 返回值省略,包括了C++ 返回值省略的使用技巧和注意事项,需要的朋友参考一下 示例 如果从函数返回prvalue表达式,并且prvalue表达式的类型与函数的返回类型相同,则可以忽略prvalue临时对象的副本: 在这种情况下,几乎所有编译器都将忽略临时构造。

  • 函数接受参数。在 Go 中,函数可以返回多个“结果参数”,而不仅仅是一个值。它们可以像变量那样命名和使用。 如果命名了返回值参数,一个没有参数的return语句,会将当前的值作为返回值返回。注意,如果遇到if等代码块和返回值同名,还需要显示写出返回值。 package main import "fmt" func split(sum int) (x, y int) { x = sum *

  • 延迟函数可以读取并分配给返回函数的命名返回值。 我想程序员的意图是返回1作为结果,并想知道为什么它被重写,以及后面的设计决策是什么。

  • 有些人不知道在C中可以通过值传递和返回结构。我的问题是编译器在C中返回结构时会进行不必要的复制。C编译器(如GCC)是否使用返回值优化(RVO)优化,或者这只是C中的一个概念?我读过的所有关于RVO和复制省略的东西都是关于C的。 让我们考虑一个例子。我目前正在用C实现一个double-double数据类型(或者更确切地说是float-float开始,因为我发现它很容易进行单元测试)。考虑下面的代码

  • 我刚开始学习Go,我对Go博客中使用defer更改命名返回值的一个示例感到困惑--defer、Panic和recover。 我在下面的代码中进行了测试,在函数中,它返回1,因为它不是上面提到的“没有参数的返回语句”。 我的问题是,在第一个示例中,周围的函数c有一个命名的返回值i,但是函数使用,在第二个示例中,我们可以看到,无论是什么值,它都应该返回1。但是为什么在更改延迟函数后,函数返回的值,而不

  • 我试图检查unordered_set的insert()函数的返回值,但遇到以下错误: 错误-->请求将“std::pair ,bool>”转换为非标量类型“std::unordered_set::iterator{又名std::__detail::_node_iterator }”