函数返回类型为bool时,为什么不能在C ++ 14中返回共享指针?

亚历克西斯·威尔克

我正在使用g ++并编写一个简单的函数:

#include <memory>

std::shared_ptr<char> ptr;

bool fails_compiling()
{
    return ptr;
}

从界面中可以看到,该shared_ptr实现包括一个bool运算符,甚至可以应用如下快速修复方法:

    return static_cast<bool>(ptr);

现在可以编译了。

为什么返回算法不尝试自动转换来bool喜欢if()while()做?

怀念

如果您签出std::shared_ptr的bool转换运算符,您将看到它声明为:

explicit operator bool() const;

使用explicit只是告诉编译器禁止隐式转换,这是因为函数的返回类型与要返回的对象类型不同而发生的。但是,这不会影响上下文转换

在以下任何情况下发生:

  • 控制的表达ifwhilefor;
  • 逻辑运算符!&&||;
  • 条件运算符?:;
  • static_assert;
  • noexcept

以上引用自cppreference

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我不能在返回 const 的 bool 函数中为类成员变量赋值?C++

为什么在C ++中返回类型不能是函数类型而是函数指针?

打字稿为什么不能在函数中返回标题?

为什么不能在函数中返回字符?

从弱指针返回类型返回共享指针

为什么C函数不能返回数组类型?

为什么在C ++中以bool类型打印函数指针地址?

为什么将()的返回类型设置为bool,但仍应如此?

为什么推定返回类型的模板不能在其其他版本中重载?

为什么这个模板函数不能识别 lamda 的返回类型?

为什么不能自动成为函数的返回类型?

为什么虚拟函数不能使用返回类型推导?

当T不是引用时,为什么返回类型为option <T>时不返回空指针

防止在返回时复制共享指针

在C ++中返回指针的函数

在C中,为什么将幂设置为1/2时幂函数返回1?

为什么 rstrip 不能在 Python 中返回原始文本?

为什么Flutter中的动态类型函数不能返回正确的类型?

为什么我们不能将int变量与c中的int返回类型函数进行比较?

函数概念返回类型(必须为bool)

为什么此代码可能在C ++中崩溃(指针返回)?

为什么不能在.reduce()函数中将推入的结果返回到累加器?

不能在 C 中传递/返回结构和函数

sequelize => 为什么不能在我包含其他关联表时排除返回的属性

在返回从函数的返回类型派生的类型的本地对象时,为什么未选择move构造函数?

为什么C ++ std :: min_element库函数接受使用bool返回类型的函数对象而不是像C中的int的函子?

为什么不能在函数文字中为变量分配占位符?

为什么函数可以返回字符数组,而不能返回其他类型的数组?

为什么新的Array(3)函数不能在Array中返回3个未定义的值?