nullptr (λν¬μΈν°)
- ν¬μΈν° νμ μ μμλ‘, ν¬μΈν°κ° μ΄λ€ μ ν¨ν λ©λͺ¨λ¦¬ μ£Όμλ κ°λ¦¬ν€μ§ μμμ λͺ μμ μΌλ‘ νννλ€.
- ν¬μΈν°κ° μ ν¨ν λ©λͺ¨λ¦¬ μ£Όμλ₯Ό κ°λ¦¬ν€μ§ μμ λ μ¬μ©νλ κ°μΌλ‘, 0μ΄λ NULLμ λμ νμ¬ μ¬μ©λλ€
- nullptrλ₯Ό μ¬μ©νλ©΄ ν¨μ μ€λ²λ‘λ©μμ λͺ ννκ² νμ μ ꡬλΆν μ μλ€. μ΄λ NULLμ΄ μ μνμΌλ‘ μ·¨κΈλκΈ° λλ¬Έμ λ°μν μ μλ νΌλμ νΌν μ μλ€.
#include <iostream>
int main() {
int* ptr = nullptr;
if (ptr == nullptr) {
std::cout << "Pointer is null" << std::endl;
}
// nullptrμμ λΉκ΅λ νμ
μμ νκ² μνλ©λλ€.
if (ptr != nullptr) {
std::cout << "Pointer is not null" << std::endl;
}
return 0;
}
- ptrμ΄ nullptrκ³Ό λΉκ΅ν λ, λΉκ΅ μ°μ°μλ ν¬μΈν° νμ μ λ§κ² μμ νκ² μνλλ€.
μ΄λ nullptrκ° ν¬μΈν° νμ κ³Ό λͺ νν μ°κ΄λμ΄ μκΈ° λλ¬Έμ΄λ€.
auto (μ€ν )
- νμ μ μΈμ κ°μννμ¬ μ½λλ₯Ό κ°κ²°νκ² ν μ μλ€.
- 볡μ‘ν νμ μ΄λ ν νλ¦Ώ μ¬μ© μ μμ νκ² νμ μ μΆλ‘ νλ€
- λ°λ³΅μλ 볡μ‘ν νμ μ λ³μλ₯Ό μ½κ² λ€λ£° μ μλ€.
- autoλ₯Ό μ¬μ©νλ©΄ λ³μμ νμ μ λͺ μμ μΌλ‘ μ μΈνμ§ μκ³ , λ³μμ μ΄κΈ°κ°μ λ°λΌ νμ μ μλμΌλ‘ μΆλ‘ νλ€.
- λ³μμ νμ μ μ»΄νμΌλ¬κ° μλμΌλ‘ μΆλ‘ νλλ‘ νμ©νλ€. μ΄λ₯Ό ν΅ν΄ μ½λμ κ°λ μ±μ λμ΄κ³ , νμ μ μΈμ κ°μνν μ μλ€. autoλ νΉν 볡μ‘ν νμ μ΄λ ν νλ¦Ώ μ¬μ© μ μ½λμ μ μ§λ³΄μμ±μ ν₯μμν€λ λ° λμμ μ€λ€.
<μ£Όλ‘ μ¬μ©λλ μν©>
1. λ°λ³΅μ (Iterators) μ¬μ©
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// autoλ₯Ό μ¬μ©νμ¬ λ°λ³΅μμ νμ
μ μλμΌλ‘ μΆλ‘
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
- auto it = vec.begin();μμ itμ νμ μ std::vector<int>::iteratorλ‘ μλμΌλ‘ μΆλ‘ λ¨
- μ΄λ₯Ό ν΅ν΄ λ°λ³΅μμ νμ μ λͺ μμ μΌλ‘ μ μΈν νμκ° μμ
2. 볡μ‘ν νμ μ λ³μ μ μΈ
#include <iostream>
#include <map>
#include <string>
int main() {
std::map<std::string, int> my_map;
my_map["apple"] = 3;
my_map["banana"] = 5;
// autoλ₯Ό μ¬μ©νμ¬ λ§΅μ μμλ₯Ό λ°λ³΅
for (auto& pair : my_map) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
- auto& pair : my_mapμμ pairμ νμ μ std::pair<const std::string, int>λ‘ μλμΌλ‘ μΆλ‘ λ¨
- 볡μ‘ν νμ μ λͺ μμ μΌλ‘ μ μΈν νμκ° μμ΄ μ½λκ° κ°κ²°ν΄μ§
3. ν¨μ λ°ν νμ
#include <iostream>
#include <vector>
auto getVector() -> std::vector<int> {
return std::vector<int>{1, 2, 3, 4, 5};
}
int main() {
auto vec = getVector(); // vecλ std::vector<int>λ‘ μΆλ‘ λ¨
for (const auto& element : vec) {
std::cout << element << " ";
}
std::cout << std::endl;
return 0;
}
- auto getVector() -> std::vector<int> ꡬ문μμ ν¨μ getVectorμ λ°ν νμ μ autoμ νν λ°ν νμ νκΈ°λ²μΌλ‘ μ§μ
- auto vec = getVector();μμ vecμ νμ μ std::vector<int>λ‘ μλμΌλ‘ μΆλ‘ λ¨
autoμ λ¨μ
- λͺ νμ±: νμ μΆλ‘ μ΄ μμκ³Ό λ€λ₯Ό μ μμΌλ©°, μ΄κΈ°κ°μ΄ νμνλ€
- κ°λ μ±: κ³Όλν μ¬μ©μ μ½λμ κ°λ μ±μ μ νμν¬ μ μλ€.
decltype (λν΄νμ )
- λ³μλ ννμμ νμ μ μΆλ‘ νλ κ²½μ° μ¬μ©λ¨
- λ³μ μ μΈμμ νμ μ λͺ μμ μΌλ‘ μ§μ ν νμ μμ΄, ννμμ νμ μ μλμΌλ‘ μΆλ‘ ν μ μκ² ν΄μ€λ€.
- μ΄ κΈ°λ₯μ νμ μΆλ‘ μ ν΅ν΄ λ μ μ°νκ³ μμ ν μ½λ μμ±μ μ§μ
- autoμμ μ°¨μ΄μ μΌλ‘λ, decltypeλ ννμμ νμ μ μΆλ‘ νμ¬ λ³μλ ν¨μμ νμ μ μλμΌλ‘ κ²°μ νλ€λ μ μ΄λ€.
decltype(expression) variable_name;
: expressionμ νμ μ΄ variable_nameμ ν λΉλλ€.
1. λ³μμ νμ μΆλ‘
#include <iostream>
int main() {
int x = 10;
decltype(x) y = 20; // yμ νμ
μ intλ‘ μΆλ‘ λ¨
std::cout << "y: " << y << std::endl;
return 0;
}
- decltype(x) y = 20;μμ decltype(x)λ xμ νμ μ μΆλ‘ νλ―λ‘, yμ νμ μ intκ° λλ€
2. ν¨μμ λ°ν νμ μΆλ‘
#include <iostream>
int add(int a, int b) {
return a + b;
}
decltype(add(1, 2)) subtract(int a, int b) {
return a - b;
}
int main() {
auto result = subtract(10, 5); // resultμ νμ
μ intλ‘ μΆλ‘ λ¨
std::cout << "Result: " << result << std::endl;
return 0;
}
- decltype(add(1, 2))λ add ν¨μμ λ°ν νμ μ μΆλ‘ . subtract ν¨μλ addμ κ°μ λ°ν νμ μ κ°μ§λ―λ‘, resultλ int νμ μΌλ‘ μΆλ‘ λλ€
3. 볡μ‘ν ννμμ νμ μΆλ‘
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// autoλ₯Ό μ¬μ©νμ¬ λ°λ³΅μ νμ
μΆλ‘
auto it = vec.begin();
// decltypeμ μ¬μ©νμ¬ λ°λ³΅μ νμ
μΆλ‘
decltype(vec.begin()) it2 = vec.begin();
std::cout << "Using auto: " << *it << std::endl;
std::cout << "Using decltype: " << *it2 << std::endl;
return 0;
}
- auto it = vec.begin();μ decltype(vec.begin()) it2 = vec.begin();μμ itμ it2λ std::vector<int>::iterator νμ μΌλ‘ μΆλ‘ λ¨
4. ν¨μμ λλ€ ννμμ νμ μΆλ‘
#include <iostream>
#include <functional>
int main() {
// λλ€ ννμ μ μ
auto lambda = [](int a, int b) { return a + b; };
// decltypeμ μ¬μ©νμ¬ λλ€μ νμ
μΆλ‘
decltype(lambda) another_lambda = [](int a, int b) { return a - b; };
std::cout << "Lambda result: " << lambda(5, 3) << std::endl;
std::cout << "Another lambda result: " << another_lambda(5, 3) << std::endl;
return 0;
}
- decltype(lambda)λ λλ€ ννμμ νμ μ μΆλ‘ . another_lambdaλ λμΌν νμ μ λλ€λ‘ μ μλ¨
decltype(x)μ decltype((x))μ μ°¨μ΄
μ C++μμ ννμμ νμ μ μΆλ‘ ν λ μ¬μ©λμ§λ§, μ΄ λ κ°μ§λ νμ μΆλ‘ μ μμ΄ μ€μν μ°¨μ΄μ μ΄ μλ€.
μ΄ μ°¨μ΄μ μ νΉν λ³μμ νμ μ΄ μ°Έμ‘°μΈ κ²½μ°λ ννμμ΄ λ³΅ν©μ μΈ κ²½μ°μ μ€μν μν μ ν¨
- decltype(x):
- xκ° μ°Έμ‘° νμ μ΄ μλλ©΄ xμ νμ μ κ·Έλλ‘ μΆλ‘ ν©λλ€.
- xκ° μ°Έμ‘° νμ μ΄ μλλ©΄ decltype(x)λ xμ μ€μ νμ μ λ°νν©λλ€.
- decltype((x)):
- xκ° μ°Έμ‘° νμ μ΄λΌλ©΄, decltype((x))λ μ°Έμ‘° νμ μ ν¬ν¨ν©λλ€.
- xκ° μ°Έμ‘° νμ μ΄ μλλΌλ©΄, decltype((x))λ xλ₯Ό κ΄νΈλ‘ κ°μΈμ ννμμΌλ‘ μ·¨κΈνλ―λ‘ xμ νμ μ΄ μ°Έμ‘°κ° μλ νμ μΌλ‘ μΆλ‘ λ©λλ€.
μ 리:
- decltype(x)λ λ¨μν λ³μ xμ νμ μ μΆλ‘
- decltype((x))λ xλ₯Ό ννμμΌλ‘ λ€λ£¨λ©°, xμ μ°Έμ‘° νμ μ ν¬ν¨νλ κ²½μ°κ° μμ
lvalueμ rvalue
lvalue:
- λ©λͺ¨λ¦¬μ νΉμ μμΉλ₯Ό κ°λ¦¬ν€λ ννμμΌλ‘, κ·Έ μμΉμμ κ°μ μ½κ±°λ μΈ μ μλ€. λμ
μ°μ°μμ μ’μΈ‘μ μμΉ
- μμΉ: λ©λͺ¨λ¦¬μ νΉμ μμΉλ₯Ό κ°λ¦¬ν΄. κ°μ μ½κ³ μΈ μ μλ μμΉ (μ’μΈ‘μ μμΉ).
- μ: λ³μ, λ°°μ΄μ μμ.
- μμ: int x = 5; x = 10;μμ xλ lvalue
- λ©λͺ¨λ¦¬μ μμΉλ₯Ό μ°Έμ‘°ν μ μλ κ°μΌλ‘, μ£Όλ‘ λ³μλ κ°μ²΄μ λ©€λ²λ₯Ό λνλΈλ€.
rvalue:
- μμ κ°μ λνλ΄λ ννμμΌλ‘, κ·Έ κ°μ μ½μ μλ§ μμΌλ©°, μ§μ μ μΌλ‘ κ°μ μΈ μλ μλ€.λμ
μ°μ°μμ μ°μΈ‘μ μμΉ
- μμΉ: μμ(μΌμ)μ μΈ κ°. λ©λͺ¨λ¦¬ μμΉκ° μκ³ , κ°λ§ μ‘΄μ¬νλ€. μμμ μΈ κ° (μ°μΈ‘μ μμΉ).
- μ: 리ν°λ΄, μ°μ° κ²°κ³Ό.
- μμ: x + 5 λλ 10μ rvalue
- μμμ μ΄λ©° λ©λͺ¨λ¦¬ μμΉλ₯Ό κ°μ§μ§ μλ κ°μΌλ‘, μ£Όλ‘ μμλ μ°μ° κ²°κ³Όλ₯Ό λνλΈλ€.
int x = 10; // 10μ rvalue
x = x + 5; // x + 5λ rvalue
'C Programming Language > C++' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
C++ νμ€ ν νλ¦Ώ λΌμ΄λΈλ¬λ¦¬ STL(Standard Template Library) (0) | 2024.08.25 |
---|---|
C++ νμ κ³Ό μμμ λν΄ νμ΅νκΈ° (2) (0) | 2024.08.25 |
C++ ν¬μΈν°, λμ ν λΉ, μ°Έμ‘° λ³μμ λν΄ νμ΅νκΈ° (0) | 2024.08.14 |
C++ μ§μλ³μμ μ μλ³μμ λν΄ νμ΅νκΈ° (0) | 2024.08.14 |
C++ ν λ³νμ λν΄ νμ΅νκΈ° (0) | 2024.08.14 |