我正在做一些类型检查在我的项目。下面的示例
using namespace std;
cout << ( is_convertible<ostream,ostream>::value ? "TRUE":"FALSE" ) << endl;返回"FALSE“。
谁能解释一下原因吗?
发布于 2017-03-28 13:15:31
is_convertible测试一个虚函数
To test() { return std::declval<From>(); }是格式良好的(来源)。
std::ostream是std::basic_ostream<char>的别名。它的复制构造函数被删除,它的移动构造函数受到保护。
因此,test虚函数不是很好的形式。
简而言之,您询问是否可以从ostream中移除构造ostream,答案是"no“。
发布于 2017-03-28 13:19:22
您不能复制ostream (就内部FILE*表示而言,这是没有意义的)。因此,您需要使用引用进行测试(这总是比指针更安全):
std::cout << std::is_convertible<std::ostream&,std::ostream&>::value;发布于 2017-03-28 13:17:21
显式删除std::ostream的复制构造函数。测试std::is_convertible告诉您是否可以进行隐式转换,但它不适用于ostreams。很可能您想要使用std::is_convertible。
https://stackoverflow.com/questions/43070539
复制相似问题