在 C++ 中使用类似 C 的初始化或构造函数初始化是否被认为更好? [复制]

2024-02-12

可能的重复:
什么时候应该使用直接初始化,什么时候应该使用复制初始化? https://stackoverflow.com/questions/4293596/when-should-you-use-direct-initialization-and-when-copy-initialization

我知道两者

int a = 1;

and

int a(1);

使用 C++ 工作,但哪一个被认为更好用?


For int没有什么区别。这int a = 1;语法是复制初始化, while int a(1); is 直接初始化。即使对于一般类类型,编译器也几乎可以保证生成相同的代码,但复制初始化要求类not有一个声明的复制构造函数explicit.

为了说明这一点,直接初始化直接调用相应的构造函数:

T x(arg);

另一方面,复制初始化的行为“就像”制作了一个副本:

T x = arg; // "as if" T x(T(arg));, but implicitly so

复制省略是明确允许和鼓励的,但“好像”构造必须仍然有效,即复制构造函数必须可访问并且不显式或删除。一个例子:

struct T
{
    T(int) { } // one-argument constructor needed for `T x = 1;` syntax

    // T(T const &) = delete;            // Error: deleted copy constructor
    // explicit T(T const &) = default;  // Error: explicit copy constructor
    // private: T(T const &) = default;  // Error: inaccessible copy constructor
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中使用类似 C 的初始化或构造函数初始化是否被认为更好? [复制] 的相关文章

随机推荐