λ°μν
Language/C++
[C++11] keyword: static_assert
[C++11] keyword: static_assert
2020.07.231. μ€λͺ
statc_assertλ C++11μ μΆκ°λ ν€μλλ‘, μΈμλ‘ μ λ¬λ μμ΄ μ°ΈμΈμ§ μλμ§ μ»΄νμΌ νμμ νμΈνλ€. static_assertμ μ λ¬λ μμ΄ μ°Έμ΄λΌλ©΄, μ»΄νμΌλ¬μ μν΄ ν΄λΉ μμ 무μλκ³ , κ±°μ§μ΄λΌλ©΄ ν΄λΉ λ¬Έμ₯μμ μ»΄νμΌ μ€λ₯λ₯Ό λ°μμν¨λ€. static_assert( constant-expression, string-literal ); static_assert( constant-expression ); // C++17 (Visual Studio 2017 and later) μ»΄νμΌ νμμ μνλλ ν€μλμ΄λ―λ‘ μ²« λ²μ§Έ μΈμ μμ μ»΄νμΌ νμμ¬ κ²°μ λ μ μλ μΈμμ¬μΌ νλ€. static_assert(sizeof(void *) == 4, "64-bit code generation is..
[C++] keyword: enum class
[C++] keyword: enum class
2020.07.231. μ€λͺ
C++03κΉμ§μ enumμ μ¬λ¬κ°μ§ λ¬Έμ λ₯Ό κ°μ§κ³ μμλ€. κ·Έλμ κ·Έ λ¬Έμ λ₯Ό ν΄κ²°νκ³ μ C++11λΆν° enum classλΌλ κ²μ΄ λ±μ₯νλ€. κΈ°μ‘΄ enumμ λ¬Έμ μ λ€μ λ€μκ³Ό κ°λ€. 1.1) κΈ°μ‘΄ enumμ λ¬Έμ 1.1.1) μ λ°© μ μΈ λΆκ°λ₯ κΈ°μ‘΄ enumμ enumeratorμ μ΄λ€ κ°μ΄ λ€μ΄μμμ§ μ μ μμΌλ©΄ κ·Έ ν¬κΈ°λ₯Ό μ ν μ μκΈ° λλ¬Έμ μ λ°© μ μΈμ ν μ μλ€. enum Fruit; // μ λ°© μ μΈ λΆκ°λ₯ void main() { Fruit f = Apple; // λ°λΌμ ν΄λΉ enumμ μ°Ύμμ μμ } enum Fruit { Apple, Banana, Peach, }; λ°λΌμ μμ κ°μ΄ μ»΄νμΌμ ν μ μμΌλ©° 맀 νμΌ μλ¨μ enumμ μ μν΄μ€μΌ νλ λΆνΈν¨μ΄ μλ€. 1.1.2) ..
[C++] keyword: static_cast, dynamic_cast, reinterpret_cast, const_cast
[C++] keyword: static_cast, dynamic_cast, reinterpret_cast, const_cast
2020.07.231. μ€λͺ
Cμ μΊμ€νΈ μ°μ°μλ λ³μμ νμ
μ λ°κΏ μ μλ€λ λ©΄μμ νΈλ¦¬νκ³ μ μ°ν μ½λ μμ±μ λμμ€λ€. νμ§λ§ λ무 무μ±
μνκ³ κ°λ°μμκ² λͺ¨λ κ²μ λ λκΈ΄λ€. C++μμλ μ’ λ μμ νκ³ λ³ν λͺ©μ μ λ§κ² κ³¨λΌ μΈ μ μλ 4κ°μ μλ‘μ΄ μΊμ€νΈ μ°μ°μλ₯Ό μ 곡νλ€. static_cast reinterpret_cast dynamic_cast const_cat 1.1) static_cast static_cast μ°μ°μλ μ§μ ν νμ
μΌλ‘ λ³κ²½νλλ° λ¬΄μ‘°κ±΄ λ³κ²½νλ κ²μ΄ μλλΌ λ
Όλ¦¬μ μΌλ‘ λ³ν κ°λ₯ν νμ
λ§ λ³ννλ€. void main() { const char* str = "korea"; int* pi; double d = 123.456; int i; i = static_cast(d); // κ°λ₯ pi =..
[C++] keyword: noexcept
[C++] keyword: noexcept
2020.07.231. μ€λͺ
λ§μ½μ μ΄λ€ ν¨μκ° μμΈλ₯Ό λ°μμν€μ§ μλλ€λ©΄ noexcept ν€μλλ₯Ό ν΅ν΄ λͺ
μν μ μλ€. int foo() noexcept {} foo ν¨μμ κ²½μ° μμΈλ₯Ό λ°μμν€μ§ μμΌλ―λ‘ μμ κ°μ΄ ν¨μ μ μ μμ noexceptλ₯Ό λ£μμΌλ‘μ¨ λνλΌ μ μλ€. #include using namespace std; int foo() noexcept { return 0; } int bar() noexcept { throw 1; } int main() { foo(); try { bar(); } catch (int x) { std::cout
[C++11] keyword: constexpr
[C++11] keyword: constexpr
2020.07.231. μ€λͺ
constexpr ν€μλλ κ°μ²΄λ ν¨μ μμ λΆμΌ μ μλ ν€μλλ‘, ν΄λΉ κ°μ²΄λ ν¨μμ λ¦¬ν΄ κ°μ μ»΄νμΌ νμμ κ°μ μ μ μλ€λ μλ―Έλ₯Ό μ λ¬νλ€. int arr[size]; μ λ°°μ΄ μ μΈμμ΄ μ»΄νμΌλκΈ° μν΄μλ sizeκ° μ μ μμ μμ΄μ¬μΌ νκ³ template struct A { int operator()() { return N; } }; A a; ν
νλ¦Ώ νμ
μΈμμ κ²½μ°λ λ§μ°¬κ°μ§λ‘ numberκ° μ μ μμμμ΄μ¬λ§ νλ€. κ·Έ μΈμλ, enum A { a = number, b, c }; enumμμ κ°μ μ§μ ν΄μ€ λμ μ€λ number μμ μ μ μμ μμ΄μ¬λ§ νλ€. constexprμ μμ λ§ν λλ‘, μ΄λ ν μμ΄ μμμμ΄λΌκ³ λͺ
μν΄μ£Όλ ν€μλλ€. #include using names..
[C++] keyword: using
[C++] keyword: using
2020.07.231. μ€λͺ
using ν€μλλ λ€μκ³Ό κ°μ΄ νμ©ν μ μλ€. 1. namespace using μ§μμ(Directive) 2. namespace using μ μΈ(Declaration) 3. νμ
μ μ 4. ν΄λμ€ κ³μΈ΅μμμ μ¬μ© 1.1) namespace using μ§μμ(Directive) λ€μ μ€νμ΄μ€λ λͺ
μΉμ μ μΈ μμμ λΆλ¦¬ν΄μ μΆ©λμ λ°©μ§νλ€. κ·Έλμ λ€μ μ€νμ΄μ€ μμ λͺ
μΉμ μ μΈνλ©΄ μ΄λ¦μ λΆμΌ λ μΆ©λμ κ±±μ νμ§ μκ³ μμ λ‘κ² μ΄λ¦μ λΆμΌ μ μλ€. κ·Έλ¬λ μ΄λ κ² μμ±λ λͺ
μΉμ μ¬μ©νλ €λ©΄ λ§€λ² μμμ λ°νμΌ νλ―λ‘ λ§€μ° λ²κ±°λ‘λ€. λ°λΌμ using namespace (λ€μ μ€νμ΄μ€ μ΄λ¦)μ ν΅ν΄ λ§€λ² λ€μ μ€νμ΄μ€λ₯Ό μλ΅νκ³ λ°λ‘ μ¬μ©ν μ μλ€. #include using namespac..
[C++] keyword: friend
[C++] keyword: friend
2020.07.231. μ€λͺ
friend ν€μλλ ν΄λμ€ λ΄λΆμμ λ€λ₯Έ ν΄λμ€λ ν¨μλ€μ friendλ‘ μ μν μ μλ€. friendλ‘ μ μλ ν΄λμ€λ ν¨μλ€μ μλμ ν΄λμ€μ privateλ‘ μ μλ λ³μλ ν¨μλ€μ μ κ·Όν μ μλ€. class A { private: void private_func() {} int private_num; // B λ A μ μΉκ΅¬! friend class B; // func μ A μ μΉκ΅¬! friend void func(); }; class B { public: void b() { A a; // λΉλ‘ private ν¨μμ νλλ€μ΄μ§λ§ μΉκ΅¬μ΄κΈ° λλ¬Έμ μ κ·Ό κ°λ₯νλ€. a.private_func(); a.private_num = 2; } }; void func() { A a; // λΉλ‘ pr..
[C++] keyword: static
[C++] keyword: static
2020.07.231. μ€λͺ
static ν€μλλ C++μμ νΉλ³ν νΉμ±μ λΆμ¬νλ λ° μ¬μ©νλ€. staticμΌλ‘ μ μΈλ κ²λ€μ νλ‘κ·Έλ¨ μ€ν μκ° λμ ν λ²λ§ μ μ λ°μ΄ν° μμμ μ μ₯λκ³ , νλ‘κ·Έλ¨ μ€ν λμ μ μ§λλ€. static ν€μλλ λ€μκ³Ό κ°μ΄ μ¬μ©λλ€. 1. ν¨μ λ΄μμ static λ³μ 2. static ν΄λμ€ κ°μ²΄ 3. ν΄λμ€ λ΄ static λ©€λ² λ³μ 4. ν΄λμ€ λ΄ static ν¨μ 2. μμ 2.1) ν¨μ λ΄μμ static λ³μ #include using namespace std; void counter() { static int count = 0; cout
[C++] keyword: explicit
[C++] keyword: explicit
2020.07.221. μ€λͺ
explicit ν€μλλ₯Ό μ¬μ©νλ©΄ μ»΄νμΌλ¬μ μμμ νλ³νμ λ§μ μ μλ€. class A { public: int num; explicit A(int num) : num(num) {} }; 2. μμ 2.1) explicit ν€μλλ₯Ό μ¬μ©νμ§ μμ κ²½μ°(μμμ νλ³νμ΄ μΌμ΄λ κ²½μ°) #include using namespace std; class A { public: int num; A(int num) : num(num) {} }; void print_a(A a) { cout
[C++] keyword: inline, __inline, __forceinline
[C++] keyword: inline, __inline, __forceinline
2020.07.221. μ€λͺ
1.1) inline inline ν€μλλ ν¨μ νΈμΆ μ λ°μνλ μ€λ²ν€λλ₯Ό μ€μ΄κΈ° μν΄ ν¨μλ₯Ό νΈμΆνλ λμ ν¨μκ° νΈμΆλλ κ³³λ§λ€ ν¨μμ μ½λλ₯Ό 볡μ¬ν΄ λ£μ΄μ£Όλ λ°©λ²μ΄λ€. κ·Έλ λ€λ©΄ ν¨μ νΈμΆ μ λ°μνλ μ€λ²ν€λλ λκΉ? μ€μ λ‘ ν¨μκ° νΈμΆλλ κ³Όμ μ μμ½νλ©΄ 1. ν¨μμ μΈμλ₯Ό μ€νμ μ μ₯ 2. ν¨μκ° λ¦¬ν΄λ λ λμμ¬ μ£Όμλ₯Ό μ€νμ΄λ λ μ§μ€ν°μ μ μ₯ 3. ν¨μμ μμ μ£Όμλ‘ μ ν 4. ν¨μμ μ½λ μ€ν 5. ν¨μμμ λ§λ€μ΄μ§ μ§μλ³μ, μ€νμ μ μ₯λ μΈμ ν΄μ , λ¦¬ν΄ κ°μ λ μ§μ€ν°μ μ μ₯ 6. ν¨μλ₯Ό νΈμΆ ν λ μ μ₯ν΄λ μ£Όμλ‘ λλμκ° μμ κ°μ κ³Όμ μ κ±°μΉλλ° κ°λ¨ν ν¨μλ₯Ό νΈμΆνκΈ° μν΄μ μ λ° λͺ
λ Ήμ΄λ€μ μνν΄μΌ νλ€λ©΄ μ€λ²ν€λκ° λ μλ°μ μλ€. μ΄λ° μ€λ² ν€λλ₯Ό μ€μ΄κΈ° μν΄ C..
[C++] keyword: const
[C++] keyword: const
2020.07.221. μ€λͺ
const ν€μλμ ν¨κ» μ μν λ³μμ κ°μ μμ μ΄ λΆκ°λ₯νλ€. μ¦, μμν λμ΄λ²λ¦¬λλ° νλ‘κ·Έλλ° μ λ°λλ©΄ μ λ κ°μ΄ μμ κ²½μ° μ μ©νλ€. μ½λκ° κΈΈμ΄μ§ μ€μλ‘ λ³μμ κ°μ΄ λ°λμ΄ μ§λ κ²μ λ°©μ§ν κ²½μ° νμ©ν μ μλ€. 2. μμ 2.1) μΌλ°μ μΈ κ²½μ° const int a = 1; a = 5; // error! νλ² μ€μ λ aλ read-only memoryμ μ¬λΌκ°κ² λκ³ λ³κ²½ν μ μκ² λλ€. 2.1) ν¨μ λ΄ μΈμκ°μμ νμ©νλ κ²½μ° class Child { public: int age; string name; string address; Child() = default; Child(int age, string name, string address) : age(age), name..
[C++11] keyword: final
[C++11] keyword: final
2020.07.221. μ€λͺ
final ν€μλλ₯Ό μ¬μ©νλ©΄ ν΄λμ€λ λ©€λ² ν¨μμ μμμ λ§μ μ μλ€. class Parent final // ν΄λμ€μ final ν€μλλ₯Ό μ¬μ© ν κ²½μ° 2. μμ 2.1) finalλ‘ μ μΈ λ ν΄λμ€λ₯Ό μμνμ μ #include using namespace std; class Parent final { public: Parent() { cout