为什么 ostream 不能转换为 ostream?
Why ostream is not convertible to ostream?
我正在我的项目中进行一些类型检查。以下示例
using namespace std;
cout << ( is_convertible<ostream,ostream>::value ? "TRUE":"FALSE" ) << endl;
返回"假"。
有人可以解释为什么吗?
is_convertible
测试虚函数是否
To test() { return std::declval<From>(); }
格式良好(源)。
std::ostream
是std::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*>
.
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的for循环不能正确获取argv
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么模板类中的对象不能返回值
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 数组长度,为什么从命令行获取时不能使用它?
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我不能重载运算符<< 与 ostream 和 map( 或 unordered_map)?
- 为什么 ostream 不能转换为 ostream?
- 为什么 std::ostream 不能移动?
- 为什么不能重新分配给对 istream / ostream 的引用
- 操作符重载- cout和cin——ostream函数,不能被引用——它是一个已删除的函数
- 为什么我不能重载 ostream 的 << 运算符?