首页 > 解决方案 > C++ 中的直接 VS 复制初始化

问题描述

嗨,我正在尝试了解直接和复制初始化的工作原理,因此这个示例的输出我无法理解。

class DeletedCopy
{   public:
    
        DeletedCopy(const DeletedCopy&) = delete;
        DeletedCopy(DeletedCopy&) = delete;
        DeletedCopy()
        {
            std::cout<<"DeletedCopy Default constructor "<<std::endl;
        }
        DeletedCopy(DeletedCopy &&) 
        {
            std::cout<<"DeletedCopy move constructor"<<std::endl;
            
        }
};
class NAME
{
    private:
        std::string name;
        DeletedCopy temp;
    public:
        NAME() = default;
        NAME(const NAME& _name): name(_name.name)
        {
           std::cout<<"Copy constructor ran"<<std::endl; 
        }
        
        
        NAME(DeletedCopy d): name("v"),temp(std::move(d))
        {
            
          std::cout<<"explicit constructor NAME"<<std::endl;
        }
       
};
int main()
{
   cout << "Hello World" << endl; 

   
   NAME name3 = DeletedCopy();//this works and prints 3 lines on screen.
   NAME name4(DeletedCopy());//this doesn't print anything on console. Why doesn't this print anything. Is this statement UB
   
   return 0;
}

在此示例中,当我使用直接初始化时,控制台上没有打印任何内容。如果我使用复制初始化,那么我会在控制台上打印 3 行。为什么直接初始化案例不起作用。

标签: c++c++11initializationc++14

解决方案


推荐阅读