Initialization
Initialization
- https://en.cppreference.com/w/cpp/language/initialization
- https://eel.is/c++draft/dcl.init
- https://github.com/randomnetcat/cpp_initialization
Default initalization
int foo(int& x);
int main(){
int x;
return foo(x);
}
struct X{ int x; };
int foo(X* x);
int main(){
return foo(new X);
}
main:
sub rsp, 8
mov edi, 4
call operator new(unsigned long)
add rsp, 8
mov rdi, rax
jmp foo(X*)
main:
sub rsp, 24
lea rdi, [rsp+12]
call foo(int&)
add rsp, 24
ret
Value initalization
struct X{ int x; };
int foo(X* x);
int main(){
return foo(new X());
}
main:
sub rsp, 8
mov edi, 4
call operator new(unsigned long)
mov DWORD PTR [rax], 0
mov rdi, rax
add rsp, 8
jmp foo(X*)
int foo(int& x);
int main(){
int x{};
return foo(x);
}
main:
sub rsp, 24
lea rdi, [rsp+12]
mov DWORD PTR [rsp+12], 0
call foo(int&)
add rsp, 24
ret
int foo(int& x);
int x;
int main(){
return foo(x);
}
Direct initalization
int main() {
std::vector<int> x{5};
std::cout << x.size() << '\n';
}
1
int main() {
std::vector<int> x(5);
std::cout << x.size() << '\n';
}
5
List initalization
int main() {
std::vector<int> x{5, 2};
std::cout << x.size() << '\n';
}
2
Aggregate initalization
struct Sub {
int x;
int y;
};
struct Agg{
Sub sub;
int z;
};
int main(){
Agg x{{1, 2}, 3};
return foo(x);
}
struct Sub {
int x;
int y;
};
struct Agg{
Sub sub;
int z;
};
int main(){
Agg x{1, 2, 3};
return foo(x);
}
deck
By technology
deck
- 57