加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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,分别为小和大).使用例如内置类型的大小不能可靠地工作,因为它们都可以具有相同的大小.

…,是的,括号内容:没有括号,创建引用数组而不是引用数组将是非法尝试.只有后者给出尺寸保证,这是后.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读