我发现许多文章解释了“默认初始化和值初始化”之间的区别,但实际上我并不清楚。
这是一个例子:
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
变量有什么问题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++ 标准定义的吗?
\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}\nRun Code Online (Sandbox Code Playgroud)\n我在标准的 9.4.1 初始化器,常规下找到了以下内容:
\n\n\n7 默认初始化 T 类型的对象意味着:(...)
\n(7.2)\xe2\x80\x94 如果 T 是数组类型,则每个元素都默认初始化。
\n
我是否正确地假设这意味着它未指定,或者文档中的其他地方也没有对此进行澄清?
\n这个答案声称它已经定义(根据(a)),但是(afaict)没有提供任何证据。
\n请注意,我并不是试图在初始化之前引用数组本身(Can a (C/C++) array optimization reference itself?),而只是关心初始化顺序的可观察到的副作用。
\nc++ arrays initialization language-lawyer default-initialization
鉴于此数组声明和初始化:
std::array<bool, 20> invalid_params{};
Run Code Online (Sandbox Code Playgroud)
我可以假设数组中的所有元素都将始终初始化为 false,还是最好明确地进行初始化?
以下来自指定初始值设定项的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++ 中的构造函数的内容。我遇到过这个例子:
\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}\nRun Code Online (Sandbox Code Playgroud)\n它在编译时给出了这样的消息:
\nmain.cpp:26:7: error: use of deleted function \xe2\x80\x98A::A()\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n我可以直观地感觉到默认的 ctor 被删除了,因为 struct 内部有一个 class type 的成员A。我想问为什么需要初始化类类型成员?我们不能让它未初始化吗?
也许是一个非常微不足道的问题,但我很好奇这样设计背后的想法?我是面向对象编程的新手。
\n