C++ 使用默认构造函数初始化对象的不同方法

C++ 使用默认构造函数初始化对象的不同方法,c++,c++11,c++17,C++,C++11,C++17,似乎有所有的选择。1、2和3是相同的,只是风格的问题还是有一些不同?4应该先创建一个临时对象,然后将其分配给a,但只有当我完全关闭comliler的优化功能时才会发生,对吗 是不同的,因为它没有默认初始化。但是,这在A的情况下并不重要,因为没有要初始化的成员 是不同的,因为它没有默认初始化。但是,这在A的情况下并不重要,因为没有要初始化的成员 我不明白,你的问题与面向对象编程有什么关系?关于可用选项的补充阅读:。关于兔子洞到底有多深的一些有趣的观点:请注意,从C++17开始。事实上,它甚至不需要

似乎有所有的选择。1、2和3是相同的,只是风格的问题还是有一些不同?4应该先创建一个临时对象,然后将其分配给
a
,但只有当我完全关闭comliler的优化功能时才会发生,对吗

  • 是不同的,因为它没有默认初始化。但是,这在
    A
    的情况下并不重要,因为没有要初始化的成员
  • 是不同的,因为它没有默认初始化。但是,这在
    A
    的情况下并不重要,因为没有要初始化的成员

  • 我不明白,你的问题与面向对象编程有什么关系?关于可用选项的补充阅读:。关于兔子洞到底有多深的一些有趣的观点:请注意,从C++17开始。事实上,它甚至不需要移动构造函数(但是)。在C++中比它更复杂,而且有很多角的情况。您的所有选项可能有不同的行为(但对于您的
    A
    ,它们是相似的)。我不明白,您的问题与面向对象编程有什么关系?有关可用选项的补充阅读:。关于兔子洞到底有多深的一些有趣的观点:请注意,从C++17开始。事实上,它甚至不需要移动构造函数(但是)。在C++中比它更复杂,而且有很多角的情况。您的所有选项可能具有不同的行为(但对于
    A
    ,它们是相似的)。
    class A {};
    
    A a;// 1
    A a{};// 2
    A a = {};// 3
    A a = A();// 4