gpt4 book ai didi

c++ - C++中不同类型的初始化

转载 作者:IT老高 更新时间:2023-10-28 22:27:57 25 4
gpt4 key购买 nike

我正在学习 C++,对不同类型的初始化感到很困惑。

你可以这样做:

T a;

据我所知,它有时会初始化 a 有时不会,这取决于 T 是否具有默认构造函数。

你也可以这样做:

T a(); // or
T a(1, 2, 3... args);

; (在某些情况下):

T a = 1; // implicitly converted to T sometimes?

;如果没有构造函数:

T a = {1, 2, 3, 4, 5, 6};

;还有:

T a = T(1, 2, 3);

.

如果你想在堆上分配,有

T a = new T(1, 2, 3);

还有别的吗?

我想知道是否 a) 我已经涵盖了所有类型的初始化以及 b) 何时使用每种类型?

最佳答案

你犯了一些错误。我会清理它们的。

// Bog-standard declaration.
// Initialisation rules are a bit complex.
T a;


// WRONG - this declares a function.
T a();

// Bog-standard declaration, with constructor arguments.
// (*)
T a(1, 2, 3... args);

// Bog-standard declaration, with *one* constructor argument
// (and only if there's a matching, _non-explicit_ constructor).
// (**)
T a = 1;

// Uses aggregate initialisation, inherited from C.
// Not always possible; depends on layout of T.
T a = {1, 2, 3, 4, 5, 6};

// Invoking C++0x initializer-list constructor.
T a{1, 2, 3, 4, 5, 6};

// This is actually two things.
// First you create a [nameless] rvalue with three
// constructor arguments (*), then you copy-construct
// a [named] T from it (**).
T a = T(1, 2, 3);

// Heap allocation, the result of which gets stored
// in a pointer.
T* a = new T(1, 2, 3);

// Heap allocation without constructor arguments.
T* a = new T;

关于c++ - C++中不同类型的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5845534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com