-4
template<class T, class U>
struct is_convertible
{
    typedef char yes;
    typedef struct
    {char _[2];}no;

    static yes test(U);
    static no test(...);
    enum {value = (sizeof(test(0)) == sizeof(yes)) ? 1 : 0};
//THE PART I'M INTERESTED IN IS (test(0)). Why 0 (zero) works here?

};

请参阅代码中的注释。

4

1 回答 1

5

代码在满足其规范时“工作”。

这段代码不符合函数名所暗示的规范,也没有给出更清晰的规范。

目前,代码在可复制且隐式转换存在于from或任何指向的上下文中is_convertible<T, U>::value时产生 true ,如果不可复制,则可能无法编译,否则为 false。Ustruct is_convertibleintUU

假设的规范,基于名称和现有代码的组合,is_convertible<T, U>::value如果U是可复制构造的(在 的上下文中struct is_convertible)并且类型的值T可以隐式转换(在 的上下文中struct is_convertible)到,则应该为真U

需要稍作修改以使代码符合隐含规范:

enum {value = (sizeof(test(*(T*)0)) == sizeof(yes)) ? 1 : 0};
于 2011-03-05T15:48:03.630 回答