c – 这种类型的意思是什么,有什么好处?
发布时间:2020-12-16 09:46:29 所属栏目:百科 来源:网络整理
导读:我偶然发现了这个typedef: typedef char (small)[1];typedef char (large)[2]; 我知道要么作为参考限定符,要么作为运算符地址.既然我们在这里处理类型,我猜它是一个参考,但括号有特殊用途吗? 在上下文中,我从中获取它用于执行类型的可转换性的编译时间检查
我偶然发现了这个typedef:
typedef char (&small)[1]; typedef char (&large)[2]; 我知道&要么作为参考限定符,要么作为运算符地址.既然我们在这里处理类型,我猜它是一个参考,但括号有特殊用途吗? 在上下文中,我从中获取它用于执行类型的可转换性的编译时间检查,这种typedef如何帮助解决这个问题? 解决方法
typedef定义对char数组的引用:small是一个char的数组,large是两个char的数组.这种typedef的目的是让它们基于重载从属性检查器返回:如果属性存在,则返回一个,否则返回另一个.然后使用sizeof()来确定属性,例如:
template <typename B,typename S> struct is_base_of_helper { static small test(B*); static large test(void*,...); }; template <typename B,typename S> struct is_base_of { enum value { 1 == sizeof(is_base_of_helper<B,S>::test(static_cast<S*>(0)) }; }; 测试可能在语义上不是很准确,但想法是:在sizeof()操作中调用重载函数并测试结果的大小.根据选择的过载,可以确定类型属性的存在.使用对数组的引用具有很好的属性,可以预测它们的大小(分别为1和2,分别为小和大).使用例如内置类型的大小不能可靠地工作,因为它们都可以具有相同的大小. …,是的,括号内容:没有括号,创建引用数组而不是引用数组将是非法尝试.只有后者给出尺寸保证,这是后. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |