std :: pair:限制性过强的构造函数?

 平和-3699 发布于 2023-01-14 15:18
  • php
  • 我偶然发现了新std::pair构造函数的一个令人惊讶的行为,这是C++ 11引入的.我在使用时观察到了这个问题std::pair>,并且它发生了,因为std::atomic它既不可复制也不可移动.在下面的代码,我取代std::atomicfoobar了简化.

    下面的代码编译很好,包括GCC-4.9和Clang-3.5(有和没有libc ++):

    struct foobar
    {
        foobar(int) { } // implicit conversion
        // foobar(const foobar&) = delete;
    };
    
    std::pair p{1, 2};
    

    此行为是预期的.但是,当我删除复制构造函数时foobar,编译失败.它适用于分段构造,但我认为这不应该是必要的,因为隐式转换intfoobar.我指的是具有以下签名的构造函数:

    template 
    pair(U&& u, V&& v);
    

    你能解释为什么对构造函数是如此限制,并且不允许对noncopyable/nonmovable类型进行隐式转换?

    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有