这种类型的意思是什么,有什么好处?

mel*_*el- 3 c++ templates metaprogramming

我偶然发现了这个typedef:

typedef char (&small)[1];
typedef char (&large)[2];
Run Code Online (Sandbox Code Playgroud)

我知道&作为参考限定符或运算符地址.既然我们在这里处理类型,我猜它是一个参考,但括号有特殊用途吗?

在上下文中,我从中获取它用于执行类型的可转换性的编译时间检查,这种typedef如何帮助解决这个问题?

Die*_*ühl 6

typedef小号定义引用的数组char:small是一个数组charlarge作为两种的阵列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)) };
};
Run Code Online (Sandbox Code Playgroud)

测试可能在语义上不是很准确,但想法是:在sizeof()操作中调用重载函数并测试结果的大小.根据选择的过载,可以确定类型属性的存在.使用引用阵列具有很好的特性,它们的尺寸可被(1和2预测smalllarge分别).例如,使用内置类型的大小不能可靠地工作,因为它们都可以具有相同的大小.

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