标签: default-initialization

默认初始化和值初始化之间的歧义

我发现许多文章解释了“默认初始化和值初始化”之间的区别,但实际上我并不清楚。

这是一个例子:

class A{
   public:
      int x;
};


int main(){
    A a;// default initialization so x has undefined value.
    A b = A(); // value initialization so x is a scalar thus it is value initialized to 0

}
Run Code Online (Sandbox Code Playgroud)

我猜上面在上面可以,但是在这里:

int value = 4; // is this considered a value-initialization?
Run Code Online (Sandbox Code Playgroud)

请帮助我了解两种初始化形式之间的主要区别。

c++ initialization value-initialization default-initialization

12
推荐指数
1
解决办法
83
查看次数

如何让一个变量依赖于一个类中的其他变量?

变量有什么问题international_standard_book_number?我怎样才能让它改变,无论何时isbn_field_i改变?

#include <iostream>
#include <string>

class ISBN
{
private:
  unsigned int isbn_field_1 = 0;
  unsigned int isbn_field_2 = 0;
  unsigned int isbn_field_3 = 0;
  char digit_or_letter = 'a';
  std::string international_standard_book_number =
    std::to_string(isbn_field_1) + "-" + std::to_string(isbn_field_2) + "-" +
    std::to_string(isbn_field_3) + "-" + digit_or_letter;

public:
  ISBN()
  {
    isbn_field_1 = 0, isbn_field_2 = 0, isbn_field_3 = 0, digit_or_letter = 'a';
  }
  ISBN(unsigned int a, unsigned int b, unsigned int c, char d)
  {
    isbn_field_1 = a, isbn_field_2 …
Run Code Online (Sandbox Code Playgroud)

c++ initialization-list c++17 default-initialization

6
推荐指数
2
解决办法
168
查看次数

数组元素默认初始化的顺序是否已定义?

默认初始化数组时,其元素默认初始化的顺序是 C++ 标准定义的吗?

\n

举个例子,下面的C++程序是否保证打印严格升序的内存地址?

\n
#include <iostream>\nstruct Foo{\n    Foo() {\n        std::cout << this << std::endl;\n    }\n};\nint main() {\n    delete[] new Foo[10];\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我在标准的 9.4.1 初始化器,常规下找到了以下内容:

\n
\n

7 默认初始化 T 类型的对象意味着:(...)

\n

(7.2)\xe2\x80\x94 如果 T 是数组类型,则每个元素都默认初始化。

\n
\n

我是否正确地假设这意味着它未指定,或者文档中的其他地方也没有对此进行澄清?

\n

这个答案声称它已经定义(根据(a)),但是(afaict)没有提供任何证据。

\n

请注意,我并不是试图在初始化之前引用数组本身(Can a (C/C++) array optimization reference itself?),而只是关心初始化顺序的可观察到的副作用。

\n

c++ arrays initialization language-lawyer default-initialization

5
推荐指数
1
解决办法
139
查看次数

安全地初始化一个 std::array 的布尔值

鉴于此数组声明和初始化:

std::array<bool, 20> invalid_params{};
Run Code Online (Sandbox Code Playgroud)

我可以假设数组中的所有元素都将始终初始化为 false,还是最好明确地进行初始化?

c++ stdarray zero-initialization default-initialization

3
推荐指数
1
解决办法
74
查看次数

为什么指定的初始化器会对数据成员进行零初始化?

以下来自指定初始值设定项cppref

struct A { int x; int y; int z; };
A b{.x = 1, .z = 2}; // ok, b.y initialized to 0
Run Code Online (Sandbox Code Playgroud)

默认情况下,所有基本类型在 C++ 中都是默认初始化的,而不是零初始化的。

为什么指定的初始化器会对数据成员进行零初始化?

c++ standards initialization c++20 default-initialization

3
推荐指数
1
解决办法
962
查看次数

为什么类类型的成员需要初始化?

我正在阅读有关 C++ 中的构造函数的内容。我遇到过这个例子:

\n
#include <iostream>\n\nusing namespace std;\n\nclass NoDefault\n{\n    public:\n        NoDefault(const std::string&);\n};\n\nstruct A\n{\n    NoDefault my_mem;\n};\n\nint main()\n{\n    A a;\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

它在编译时给出了这样的消息:

\n
main.cpp:26:7: error: use of deleted function \xe2\x80\x98A::A()\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n

我可以直观地感觉到默认的 ctor 被删除了,因为 struct 内部有一个 class type 的成员A。我想问为什么需要初始化类类型成员?我们不能让它未初始化吗?

\n

也许是一个非常微不足道的问题,但我很好奇这样设计背后的想法?我是面向对象编程的新手。

\n

c++ constructor initialization class default-initialization

2
推荐指数
1
解决办法
134
查看次数