首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板参数和decltype

模板参数和decltype
EN

Stack Overflow用户
提问于 2020-12-08 12:20:35
回答 1查看 47关注 0票数 1

代码如下:‘

代码语言:javascript
复制
template<typename T>
struct has_no_destroy{
    template<typename C>
        
        static char test(decltype(&C::no_destroy));
    
    template<typename C>
        static int32_t test(...);
    
    
    const static bool value = sizeof(test<T>(0)) == 1;
};

struct A{
    
}; 

struct B{
    void no_destroy(){
    }
};

struct C{
    int no_destroy;
    
};

struct D:B{
    
};
void test(){
    std::cout<<has_no_destroy<A>::value<<std::endl;
    std::cout<<has_no_destroy<B>::value<<std::endl;
    std::cout<<has_no_destroy<C>::value<<std::endl;
    std::cout<<has_no_destroy<D>::value<<std::endl;
}

“”“

我只想知道为什么使用test(0)而不是test(1),如果我运行第一个,结果是好的!但是第二个没有达到我的预期!有人能帮上忙吗?非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-12-08 12:30:06

因为0可以被解释为空指针,这可以被重载的test接受。虽然1是一个int,只能被第二个重载的test接受,但这意味着value将始终为false

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65193038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档