首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ostream不能转换为ostream?

为什么ostream不能转换为ostream?
EN

Stack Overflow用户
提问于 2017-03-28 13:11:09
回答 3查看 108关注 0票数 2

我正在做一些类型检查在我的项目。下面的示例

代码语言:javascript
复制
using namespace std;

cout << ( is_convertible<ostream,ostream>::value ? "TRUE":"FALSE" ) << endl;

返回"FALSE“。

谁能解释一下原因吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-28 13:15:31

is_convertible测试一个虚函数

代码语言:javascript
复制
 To test() { return std::declval<From>(); }

是格式良好的(来源)。

std::ostreamstd::basic_ostream<char>的别名。它的复制构造函数被删除,它的移动构造函数受到保护。

因此,test虚函数不是很好的形式。

简而言之,您询问是否可以从ostream中移除构造ostream,答案是"no“。

票数 9
EN

Stack Overflow用户

发布于 2017-03-28 13:19:22

您不能复制ostream (就内部FILE*表示而言,这是没有意义的)。因此,您需要使用引用进行测试(这总是比指针更安全):

代码语言:javascript
复制
std::cout << std::is_convertible<std::ostream&,std::ostream&>::value;
票数 3
EN

Stack Overflow用户

发布于 2017-03-28 13:17:21

显式删除std::ostream的复制构造函数。测试std::is_convertible告诉您是否可以进行隐式转换,但它不适用于ostreams。很可能您想要使用std::is_convertible

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43070539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档