-
简介
-
说明
-
作用
- 默认构造和默认初始化.
- 值列表初始化。
{}
表示无参默认构造.
-
默认值和随机
#include <iostream> int main() { int a; int b{ }; std::cout << a << std::endl; std::cout << b << std::endl; return 0; }
16 0 [Finished in 432ms]
-
结构体
#include <iostream> struct T { char a; char b; char c; char d; }; int main() { T a; T b{ }; std::cout << std::hex << *(int*)&a << std::endl; std::cout << std::hex << *(int*)&b << std::endl; return 0; }
0 0 [Finished in 436ms]
#include <iostream> typedef char (*T)[4]; int main() { T a; T b{ }; std::cout << std::hex << *(int*)&a << std::endl; std::cout << std::hex << *(int*)&b << std::endl; return 0; }
10 0 [Finished in 429ms]
-
重载
#include <iostream> #include <vector> #include <initializer_list> struct T { T(){ std::cout << "default" << std::endl; } T(std::initializer_list<int> initial) { std::cout << "initializer_list" << std::endl; std::vector<int> temp{ initial}; } }; int main() { T a; T b{ }; T c{ 1,2,3}; return 0; }
default default initializer_list [Finished in 469ms]
-
匹配规则
-
成员变量构造
#include <iostream> class T { public: char s[4]; }; int main() { T a{ 1,2,3,4}; std::cout << std::hex << *(int*)&a << std::endl; return 0; }
4030201 [Finished in 432ms]
-
数组和成员
#include <iostream> class T { public: char a:4; char b:4; char s[3]; }; int main() { T a{ 1,2,3,4}; T b{ 1,2,3,4,5}; std::cout << std::hex << *(int*)&a << std::endl; std::cout << std::hex << *(int*)&b << std::endl; return 0; }
40321 5040321 [Finished in 432ms]
-
-
初始化
-
赋值和初始化
-
初始化和赋值
#include <iostream> class T { public: T(char a) { std::cout << "int" << std::endl; } explicit T(T*) { std::cout << "float" << std::endl; } T(const T&) { std::cout << "cons" << std::endl; } void operator=(const T&) { std::cout << "assign" << std::endl; } }; int main() { T a = 1; //T b = nullptr; T c(nullptr); T d = a; d = a; }
int float cons assign D:\codes\vs\test\test\x64\Debug\test.exe (进程 9996)已退出,代码为 0。 要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。 按任意键关闭此窗口. . .
-
小结
-
-
{}
-
转换一下
#include <iostream> class T { public: T(char a) { std::cout << "int" << std::endl; } explicit T(T*) { std::cout << "float" << std::endl; } T(const T&) { std::cout << "cons" << std::endl; } void operator=(const T&) { std::cout << "assign" << std::endl; } }; int main() { T a{ 1 }; T b{ nullptr }; T c{ (nullptr)}; T d{ a }; d = { a }; //d = { 1, a }; d = (a); d = (1, a); }
int float float cons assign assign assign D:\codes\vs\test\test\x64\Debug\test.exe (进程 9400)已退出,代码为 0。 要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。 按任意键关闭此窗口. .
-
-
出错
-
总结
C++11 {} 初始化
Guess you like
Origin blog.csdn.net/rubikchen/article/details/121888274
Recommended
Ranking