C++编译时检查类型

C++ checking types at compile time

本文关键字:类型 检查 编译 C++      更新时间:2023-10-16

我正在阅读Bjarne Stroustrup关于C++的FAQ,并阅读有关类型参数的约束以及在编译时强制执行某些约束而不会遇到荒谬模板错误的方法,并遇到了这个例子:

 template<class T1, class T2> 
    struct Can_copy {
        static void constraints(T1 a, T2 b) { T2 c = a; b = a; }
        Can_copy() { 
            void(*p)(T1, T2) = constraints;
        }
    };

但是,我不太确定在编译时如何评估这一点?将约束分配给函数指针有什么用?这是对约束的某种隐式调用吗?

抱歉,如果这是一个明显的问题,实际上只阅读了两天C++,但是有其他语言的经验。

像编译器一样思考。"将约束赋值给函数指针"强制代码生成,代码生成强制类型解析,强制生成给定类型的赋值运算符。

现在,假设由于必要的赋值运算符对给定的类型不可用,因此无法解析c=ab=a。在这种情况下,编译将失败。