为什么 ostream 不能转换为 ostream?

Why ostream is not convertible to ostream?

本文关键字:ostream 不能 为什么 转换      更新时间:2023-10-16

我正在我的项目中进行一些类型检查。以下示例

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

返回"假"。

有人可以解释为什么吗?

is_convertible测试虚函数是否

To test() { return std::declval<From>(); }

格式良好(源)。

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

所以test虚函数的形成并不好。

简而言之,你问你是否可以从ostream中移动构造一个ostream,答案是"否"。

你不能复制ostream(就内部FILE*表示而言,这毫无意义)。所以你想用引用来测试(这总是比指针安全一点):

std::cout << std::is_convertible<std::ostream&,std::ostream&>::value;

显式删除std::ostream的复制构造函数。测试std::is_convertible<From, To>告诉您隐式转换是否可行,但不适用于 ostream。很可能您想使用std::is_convertible<T*, ostream*>.