当前位置:编程学习 > C/C++ >>

C++库研究笔记——#if #elif 的错误使用

在了跟头,重新改设计了。。。。
无论is_ar为多少,始终输出 "not"
[cpp] 
template<typename T, int is_ar= 1>//ant::is_arithmetic<T>::value >  
class Test  
{  
public:  
    void test()  
    {  
#if  is_ar  
    cout<<"is\n";  
#elif !is_ar  
    cout<<"not\n";  
#endif  
    cout<<"is_arr="<<is_ar<<endl;  
    }  
};  
 为什么? 
可能原因:
#elif 是预处理过程中解析的,不做表达狮的估值
 
不过要实现倒可以这样写(但麻烦多了):
[cpp] 
template<typename T, int is_ar=ant::is_arithmetic<T>::value >  
class Test  
{  
public:  
    void test()  
    {  
    cout<<"not\n";  
    }  
};  
 
[cpp]  
template<typename T>  
class Test<T, 1>  
{  
public:  
    void test()  
    {  
    cout<<"is\n";  
    }  
};  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,