Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用条件表达式返回对象指针?_C++_Memory_Smart Pointers_Return Value Optimization - Fatal编程技术网

C++ 如何使用条件表达式返回对象指针?

C++ 如何使用条件表达式返回对象指针?,c++,memory,smart-pointers,return-value-optimization,C++,Memory,Smart Pointers,Return Value Optimization,根据25:40 class Foo应以两种方式返回: 如果 if(条件) 返回foo1 其他的 返回foo2; 带条件表达式 返回条件?食物(foo1):std::move(foo2); 如果Foo是一个唯一的\u ptr,我想检查Foo是否不是null ptr,然后返回Foo,如果它是null ptr返回null ptr。让我们暂时忘记有人可能想要删除该指针 哪条路合适 Foo*getFoo() { //获取,因为foo是唯一的ptr 返回foo?foo.get():nullptr

根据25:40

class Foo
应以两种方式返回:

  • 如果
if(条件)
返回foo1
其他的
返回foo2;
  • 带条件表达式
返回条件?食物(foo1):std::move(foo2);
如果
Foo
是一个
唯一的\u ptr
,我想检查
Foo
是否不是null ptr,然后返回
Foo
,如果它是null ptr返回
null ptr
。让我们暂时忘记有人可能想要删除该指针

哪条路合适

Foo*getFoo()
{
//获取,因为foo是唯一的ptr
返回foo?foo.get():nullptr;
}
Foo*getFoo()
{
返回foo?std::move(foo.get()):nullptr;
}

您不需要任何类型的分支。你可以用

Foo* getFoo()
{
    return foo.get();
}

这是因为如果
foo
持有
nullptr
,则将返回
nullptr
,您不需要任何类型的分支。你可以用

Foo* getFoo()
{
    return foo.get();
}

这是因为如果
foo
持有
nullptr

则返回
nullptr
,如果
foo
不拥有对象,
foo.get()
返回
nullptr
<代码>返回foo?get():nullptr因此没有任何意义,因为您可以简单地编写
return foo.get()std::move(foo.get())
也没有任何意义,因为
foo.get()
按值返回指针。您只是从右值生成右值。此外,复制和移动基本类型(如指针)的内容具有相同的效果(不涉及复制/移动构造函数/赋值运算符)。是的,这是有意义的。谢谢。如果
foo
不拥有对象,
foo.get()
返回
nullptr
<代码>返回foo?get():nullptr因此没有任何意义,因为您可以简单地编写
return foo.get()std::move(foo.get())
也没有任何意义,因为
foo.get()
按值返回指针。您只是从右值生成右值。此外,复制和移动基本类型(如指针)的内容具有相同的效果(不涉及复制/移动构造函数/赋值运算符)。是的,这是有意义的。谢谢你。@BrodaJarek3同样的事情。如果它是
nullptr
,您可以直接返回它;否则返回x
用于整数,那么为什么要用于指针呢?视频是关于返回两个不同对象中的一个,而不是返回一个可能具有不同值的对象。@BrodaJarek3相同的东西。如果它是
nullptr
,您可以直接返回它;否则返回x
用于整数,那么为什么要用于指针呢?视频是关于返回两个不同对象中的一个,而不是返回一个可能具有不同值的对象。