-
Notifications
You must be signed in to change notification settings - Fork 6
Cpp Coding Standard
ํด๋์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋
์์ ๋ง์์ผ๋ก ์์ฑํด์ผํ๋ค. ๋๋ถ๋ถ์ ๋
์๋ค์ ํด๋์ค์ public
ํ ๋ถ๋ถ์ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก public
์ด ๋จผ์ ๋์ค๊ณ ๋์ protected
, private
์์ผ๋ก ๋์์ผํ๋ค.
๋ชจ๋ ์์คํ์ผ(.h, .cpp ๋ฑ)์ ๋ฐ๋์ ์ฒซ๋ฒ์งธ ์ค์ ์ ์๊ถ ํ์๋ฅผ ํด์ผํ๋ค:
/*!
* Copyright (c) 2021 SWTube. All rights reserved.
* Licensed under the GPL-3.0 License. See LICENSE file in the project root for license information.
*/
๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ์, ๋ฉ์๋, ํด๋์ค๋ค์ ์ด๋ฆ์ ๋ช ํํด์ผํ๊ณ , ๊ตฌ์ฒด์ ์ด๋ฉฐ, ์ ๋งคํด์๋ ์๋๋ค. ํด๋์ค๊ฐ ๋๋ฆฌ ์ฐ์ด๋ฉด ์ฐ์ผ ์๋ก ๋ ์ข๊ณ ๊ตฌ์ฒด์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ. ์ค์๋ง์ ๊ฑฐ๋ฅด๋ ๊ฒ์ด ์ข๋ค.
-
ํด๋์ค์ ๊ตฌ์กฐ์ฒด์ ์ด๋ฆ์ ํ์ค์นผ ํ๊ธฐ๋ฒ์ ๋ฐ๋ฅธ๋ค
class PlayerManager; struct AnimationInfo;
-
์ง์ญ ๋ณ์ ๊ทธ๋ฆฌ๊ณ ํจ์์ ๋งค๊ฐ ๋ณ์์ ์ด๋ฆ์ ์นด๋ฉ ํ๊ธฐ๋ฒ์ ๋ฐ๋ฅธ๋ค
void SomeMethod(const int someParameter) { int someNumber; int id; }
-
๋ฉ์๋ ๋๋ ํจ์ ์ด๋ฆ์ ๋์ฌ๋ก ์์ํ๋ค.
-
public
๋ฉ์๋์ ์ด๋ฆ์ ํ์ค์นผ ํ๊ธฐ๋ฒ์ ๋ฐ๋ฅธ๋คpublic: void DoSomething();
-
๊ทธ ์ธ ๋ค๋ฅธ ๋ฉ์๋์ ์ด๋ฆ์ ์นด๋ฉ ํ๊ธฐ๋ฒ์ ๋ฐ๋ฅธ๋ค
private: void doSomething();
-
-
์ ์ฐจ(๋ฐํ๊ฐ์ด ์๋ ํจ์)๋ ๋ฐ๋์ ๋ช ํํ ์๋ฏธ๋ฅผ ๊ฐ๋ ํ๋์ฌ์ ๋ชฉ์ ์ด๋ฅผ ์ฌ์ฉํ๋ค. ๋ค๋ง, ํด๋น ํจ์๊ฐ ํด๋์ค์ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ๋งฅ์ ํ๋์ฌ์ ๋ชฉ์ ์ด๊ฐ ๋ถ๋ช ํ ๋๋ ์์ธ๋ก ํ๋ค
-
๋ถ๋ฆฌ์ธํ์ ๋ฐํํ๋ ํจ์์ ๊ฒฝ์ฐ ์ง๋ฌธ์ ํ๋ ํ์์ผ๋ก ์์ฑํ๋ค
bool IsVisible(); bool ShouldClearBuffer();
-
ํจ์์ ์ด๋ฆ์ ๋ฐ๋์ ๋ฐํํ๋ ๊ฒ์ด ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ๋์ง๋ฅผ ์ ์ ์๋๋ก ์ง์ด์ผํ๋ค
// ์ฒดํฌํด์ true๋ฉด ๋ญ ๋ป์ธ๋ฐ? bool CheckTea(FTea Tea); // ์~ true๋ฉด ์ฐจ๊ฐ freshํ๋จ ๋ป์ด๊ตฐ bool IsTeaFresh(FTea Tea);
-
์์ ๋๋
#define
์ผ๋ก ์ ์๋ ์์์ ์ด๋ฆ์ ๋ชจ๋ ๋๋ฌธ์๋ก ํ๋ ๋ฐ์ค๋ก ๊ฐ ๋จ์ด๋ฅผ ๋ถ๋ฆฌํ๋คconstexpr int SOME_CONSTANT = 1;
-
๋ค์์คํ์ด์ค๋ ๋ชจ๋ ์๋ฌธ์๋ก ์์ฑํ๋ค
namespace abc{};
-
๋ถ์ธ(boolean)ํ ๋ณ์๋ ์์
b
๋ฅผ ๋ถ์ธ๋คbool bFired; // ์ง์ญ ๋ณ์์ public ๋ฉค๋ฒ ๋ณ์์ ๊ฒฝ์ฐ bool mbFired; // ํด๋์ค์ private ๋ฉค๋ฒ ๋ณ์์ ๊ฒฝ์ฐ
-
์ธํฐํ์ด์ค๋ฅผ ์ ์ธํ ๋๋ ์์
I
๋ฅผ ๋ถ์ธ๋คclass ISomeInterface;
-
์ด๊ฑฐํ์ ์ ์ธํ ๋๋ ์์
e
๋ฅผ ๋ถ์ธ๋คenum class eDirection { North, South };
-
ํด๋์ค ๋ฉค๋ฒ ๋ณ์ ๋ช ์ ์์
m
์ ๋ถ์ธ๋คclass Employee { protected: int mDepartmentID; private: int mAge; };
-
goto
๋ ์ด๋ธ ๋ช ์ ๋ชจ๋ ๋๋ฌธ์๋ก ํ๋ ๋ฐ์ค๋ก ๊ฐ ๋จ์ด๋ฅผ ๋ถ๋ฆฌํ๋คgoto MY_LABEL; // ... MY_LABEL: std::cout << "Magic! << std::endl; return 0;
-
๊ฐ์ ๋ฐํํ๋ ํจ์์ ์ด๋ฆ์ ๋ฌด์์ ๋ฐํํ๋์ง ์ ์ ์๊ฒ ์ง๋๋ค
-
๋จ์ํ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉ๋๋ ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ์
i
,e
๊ฐ์ ๋ณ์๋ช ๋์index
,employee
์ฒ๋ผ ๋ณ์์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋์ ์์๋ณผ ์ ์๋ ๋ณ์๋ช ์ ์ฌ์ฉํ๋ค. -
๋ค์ ์ถ๊ฐ์ ์ธ ๋จ์ด๊ฐ ์ค์ง ์๋ ๊ฒฝ์ฐ ์ค์๋ง์ ๋ชจ๋ ๋๋ฌธ์๋ก ํ๊ธฐํ๋ค
int OrderID; int HttpCode;
-
๊ตฌ์กฐ์ฒด๋ ์ค์ง
public
๋ฉค๋ฒ ๋ณ์๋ง ๊ฐ์ง ์ ์๋ค. ๊ตฌ์กฐ์ฒด์ ๋ฉค๋ฒ ๋ณ์๋ช ์ ํ์ค์นผ ํ๊ธฐ๋ฒ์ ๋ฐ๋ฅด๋ฉฐ, ๊ตฌ์กฐ์ฒด ์์์๋ ํจ์๋ ์ฌ์ฉํ์ง ์๋๋ค -
์ฌ๊ท ํจ์๋ ์ด๋ฆ ๋ค์
Recursive
๋ฅผ ๋ถ์ธ๋คvoid FibonacciRecursive();
-
ํ์ผ ์ด๋ฆ์ ๋์๋ฌธ์๊น์ง ํฌํจํด์ ๋ฐ๋์ ํด๋์ค ์ด๋ฆ๊ณผ ์ผ์นํด์ผ ํ๋ค
class PlayerAnimation; PlayerAnimation.cpp PlayerAnimation.h
-
์ฌ๋ฌ ํ์ผ์ด ํ๋์ ํด๋์ค๋ฅผ ์ด๋ฃฐ ๋, ํ์ผ ์ด๋ฆ์ ํด๋์ค ์ด๋ฆ์ผ๋ก ์์ํ๊ณ , ๊ทธ ๋ค์ ๋ฐ์ค๊ณผ ์ธ๋ถ ํญ๋ชฉ ์ด๋ฆ์ ๋ถ์ธ๋ค
class RenderWorld; RenderWorld_load.cpp RenderWorld_demo.cpp RenderWorld_portals.cpp
-
Reverse OOP ํจํด์ ์ฌ์ฉํ ๋, ํ๋ซํผ ์ ์ฉ ํด๋์ค๋ ์ ํญ๋ชฉ๊ณผ ๋น์ทํ ๋ช ๋ช ๊ท์น์ ์ฌ์ฉํ๋ค
class Renderer; Renderer.h // ๊ฒ์์์ ํธ์ถ๋๋ ๋ชจ๋ Renderer ์ธํฐํ์ด์ค Renderer.cpp // ๋ชจ๋ ํ๋ซํผ ์ฉ Renderer ๊ตฌํ ์์ค Renderer_gl.h // Renderer๊ฐ ํธ์ถํ๋ RendererGL ์ธํฐํ์ด์ค Renderer_gl.cpp // RendererGL ๊ตฌํ ์์ค
-
๋นํธ ํ๋๊ทธ ์ด๊ฑฐํ์ ์ด๋ฆ ๋ค์
Flags
๋ฅผ ๋ถ์ธ๋คenum class eVisibilityFlags { }
-
๋ณ์ ๊ฐ๋ฆฌ๊ธฐ(variable shadowing)์ ํ์ฉ๋์ง ์๋๋ค. ์ธ๋ถ ๋ณ์๊ฐ ๋์ผํ ์ด๋ฆ์ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด ๋ด๋ถ ๋ณ์์๋ ๋ค๋ฅธ ์ด๋ฆ์ ์ฌ์ฉํ๋ค
class SomeClass { public: int32_t Count; public: void Func(const int32_t Count) { for (int32_t count = 0; count != 10; ++count) { // Use Count } } }
-
ํด๋์ค ๋ฉค๋ฒ ๋ณ์์ ์ ๊ทผํ ๋๋ ํญ์ setter์ getter๋ฅผ ์ฌ์ฉํ๋ค
-
ํ๋ฆฐ ๋ฐฉ์:
class Employee { public: string Name; };
-
์ฌ๋ฐ๋ฅธ ๋ฐฉ์:
class Employee { public: const string& GetName() const; void SetName(const string& name); private: string mName; };
-
-
์ธ๋ถ ํค๋ ํ์ผ์ ์ธํด๋ฃจ๋ ํ ๋๋
#include <>
์ ์ฌ์ฉ, ์์ฒด์ ์ผ๋ก ๋ง๋ ํค๋ ํ์ผ์ ์ธํด๋ฃจ๋ ํ ๋๋#include ""
๋ฅผ ์ฌ์ฉํ๋ค. -
์ธ๋ถ ํค๋ ํ์ผ์ ๋จผ์ ์ธํด๋ฃจ๋ํ ๋ค, ๋ด๋ถ ํค๋ ํ์ผ์ ์ธํด๋ฃจ๋๋ฅผ ํ ๋, ๊ฐ๋ฅํ๋ค๋ฉด ์ํ๋ฒณ ์์๋ฅผ ๋ฐ๋ฅธ๋ค
-
๋ชจ๋ ํค๋ ํ์ผ ์ฒซ ๋ฒ์งธ ์ค์
#pragma once
๋ฅผ ๊ธฐ์ฌํ๋ค -
์ง์ญ ๋ณ์๋ฅผ ์ ์ธํ ๋๋ ๊ทธ ์ง์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋์ ๋์ผํ ์ค(์ค์ฝํ)์ ์ ์ธํ๋ ๊ฒ์ ์์น์ผ๋ก ํ๋ค
-
double
์ด ๋ฐ๋์ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ ์ด์ ๋ถ๋ ์์์ ๊ฐ์f
๋ฅผ ๋ถ์ฌ์ค๋คfloat f = 0.5f;
-
switch
case
๋ฌธ์๋ ํญ์default
๋ฅผ ๋ฃ๋๋ค -
switch
case
๋ฌธ ๋์break;
๋ฅผ ๋ฃ์ง ์๊ณ ๊ทธ ๋ฐ๋ก ์๋case
๋ฌธ์ ์ฝ๋๋ฅผ ์คํํ๊ณ ์ถ์ ๊ฒฝ์ฐ, ๋ฏธ๋ฆฌ ์ ์ํด๋FALLTHROUGH
๋งคํฌ๋ก๋ฅผ ์ถ๊ฐํ๋ค. ๋จ,case
๋ฌธ ์์ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์์ธ์ด๋ค. ์ด๋ C++17 ์ฌ์์์[[fallthrough]]
์ ํธ๋ฆฌ๋ทฐํธ๋ก ๋์ฒด๋ ๊ฒ์ด๋ค.-
C++17 ์ด์
switch (number) { case 0: DoSomething(); FALLTHROUGH case 1: DoFallthrough(); break; case 2: case 3: DoNotFallthrough(); break; default: break; }
-
C++17 ์ดํ
switch (number) { case 0: DoSomething(); [[fallthrough]]; case 1: DoFallthrough(); break; case 2: case 3: DoNotFallthrough(); break; default: break; }
-
-
default
case
๊ฐ ์ ๋ ์คํ๋ ์ผ์ด ์๋ ๊ฒฝ์ฐ,default
case
์์Assert(false);
๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.Assert()
๋ ์ง์ ๊ตฌํํ๋ฉด ๊ทธ ์์์ ๋ฆด๋ฆฌ์ฆ ๋น๋ ์ ์ต์ ํ ํํธ๋ฅผ ์ถ๊ฐํ ์ ์๋คswitch (type) { case 1: ... break; default: Assert(false, "unknown type"); break; }
-
์์น์ ์ผ๋ก ๋ชจ๋ ๊ณณ์
const
๋ฅผ ์ฌ์ฉํ๋ค. ์ฌ๊ธฐ์๋ ์ง์ญ ๋ณ์์ ํจ์ ๋งค๊ฐ ๋ณ์๋ ํฌํจํ๋ค -
๊ฐ์ฒด๋ฅผ ์์ ํ์ง ์๋ ๋ฉค๋ฒ ํจ์์๋ ๋ชจ๋
const
๋ฅผ ๋ถ์ธ๋คint GetAge() const;
-
๊ฐ(value) ํ์์ ๋ณ์๋ฅผ
const
๋ก ๋ฐํํ์ง ์๋๋ค. ํฌ์ธํฐ๋ ์ฐธ์กฐ(reference)๋ฅผ ๋ฐํํ ๊ฒฝ์ฐ์๋งconst
๋ฐํ์ ํ๋ค -
ํด๋์ค ์์์ ๋ฉค๋ฒ ๋ณ์์ ๋ฉ์๋์ ๋ฑ์ฅ ์์๋ ๋ค์์ ๋ฐ๋ฅธ๋ค
-
friend
ํด๋์ค๋ค -
public
๋ฉ์๋๋ค -
protected
๋ฉ์๋๋ค -
private
๋ฉ์๋๋ค -
protected
๋ณ์๋ค -
private
๋ณ์๋ค
-
-
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํจ์ ์ค๋ฒ๋ก๋ฉ์ ํผํ๋ค
-
ํ๋ฆฐ ๋ฐฉ์
const Anim* GetAnim(const int index) const; const Anim* GetAnim(const char* name) const;
-
์ฌ๋ฐ๋ฅธ ๋ฐฉ์
const Anim* GetAnimByIndex(const int index) const; const Anim* GetAnimByName(const char* name) const;
-
-
const
๋ฐํ์ ์ํ ํจ์ ์ค๋ฒ๋ก๋ฉ์ ํ์ฉํ๋คAnim* GetAnimByIndex(const int index); const Anim* GetAnimByIndex(const int index) const;
-
const_cast
๋ฅผ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋๋ค. ๋์const
์ธ ๊ฐ์ ์ธจ ์์ ๊ฐ๋ฅํ ํํ๋ก ๋ณํํด์ ๋ฐํํ๋ ํจ์๋ฅผ ๋ง๋ ๋ค -
ํด๋์ค๋ ๊ฐ๊ฐ ๋ ๋ฆฝ๋ ์์ค ํ์ผ์ ์์ด์ผ ํ๋ค. ๋จ, ์์ ํด๋์ค ๋ช ๊ฐ๋ฅผ ํ ํ์ผ์ ๊ฐ์ด ๋ฃ์ด ๋๋ ๊ฒ์ด ์์์ ์ผ ๊ฒฝ์ฐ ์์ธ๋ฅผ ํ์ฉํ๋ค
-
ํ์ค C
assert
๋์ ์ ์์ ๋ง์Assert
๋ฒ์ ์ ๊ตฌํํ๋ค -
ํน์ ์กฐ๊ฑด์ด ๋ฐ๋์ ์ถฉ์กฑ๋์ด์ผ ํ๋ค๊ณ ๊ฐ์ (assertion)ํ๊ณ ์ง ์ฝ๋ ๋ชจ๋ ๊ณณ์
assert
๋ฅผ ์ฌ์ฉํ๋ค.Assert
๋ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์กฐ๊ฑด์ด๋ค.Assert
๋ ๋ฆด๋ฆฌ์ฆ ๋น๋์์[__assume](https://docs.microsoft.com/en-us/cpp/intrinsics/assume?view=msvc-160)
ํค์๋๋ก ๋์ฒดํ์ฌ ์ปดํ์ผ๋ฌ์ ์ต์ ํ ํํธ๋ฅผ ์ค ์ ์๋ค -
๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ง์ ๊ตฌํํ
New
,Delete
ํค์๋๋ฅผ ํตํด ํธ์ถํ๋ค -
memeset
,memcpy
,memmove
์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฐ์ฐ ์ญ์ ์ฐ๋ฆฌ ๊ณ ์ ์MemSet
,MemCpy
,MemMove
ํค์๋๋ฅผ ํตํด ํธ์ถํด์ผ ํ๋ค -
์ด๋ค ์ด์ ๋ก๋ ๋งค๊ฐ๋ณ์๋ก
nullptr
๊ฐ ๋์ด์ฌ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ํฌ์ธํฐ ๋์ ์ฐธ์กฐ์(&
)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์์น์ผ๋ก ํ๋ค (์์ธ๋ ๋ค์ ํญ๋ชฉ์ ์ฐธ๊ณ ) -
ํจ์์์ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ๊ฐ์ ๋ฐํํ ๋(
out
๋งค๊ฐ๋ณ์)๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋งค๊ฐ๋ณ์ ์ด๋ฆ ์์out
์ ๋ถ์ธ๋ค-
ํจ์
void GetScreenDimension(uint32_t* const outWidth, uint32_t* const outHeight) { }
-
ํธ์ถ
uint32_t width; uint32_t height; GetScreenDimension(&width, &height);
-
-
์ ํญ๋ชฉ์
out
๋งค๊ฐ๋ณ์๋ ๋ฐ๋์null
์ด ์๋์ด์ผ ํ๋ค (ํจ์ ๋ด๋ถ์์if
๋ฌธ ๋์assert
๋ฅผ ์ฌ์ฉํ ๊ฒ)void GetScreenDimension(uint32_t* const outWidth, uint32_t* const outHeight) { Assert(outWidth); Assert(outHeight); }
-
๋งค๊ฐ๋ณ์๊ฐ ํด๋์ค ๋ด๋ถ์์ ์ ์ฅ๋ ๋๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ค
void AddMesh(Mesh* const mesh) { mMeshCollection.push_back(mesh); }
-
๋งค๊ฐ๋ณ์๊ฐ
void
ํฌ์ธํฐ์ผ ํ๋ ๊ฒฝ์ฐ๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋คvoid Update(void* const something) { }
-
ํน์ ํฌ๊ธฐ(์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ ๋ฉค๋ฒ์ ์ง๋ ฌํ๋ฅผ ์ํ ํฌ๊ธฐ)๊ฐ ํ์ํ์ง ์์ ํ ์ด๊ฑฐํ์ ํฌ๊ธฐ ์ง์ ์๋ฅผ ์ถ๊ฐํ์ง ์๋๋ค
enum class eDirection : uint8_t { North, South }
-
๋ํดํธ ๋งค๊ฐ ๋ณ์ ๋์ ํจ์ ์ค๋ฒ๋ก๋ฉ์ ์ ํธํ๋ค
-
๋ํดํธ ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ,
nullptr
๋false
,0
๊ฐ์ด ๋นํธ ํจํด์ด 0์ธ ๊ฐ์ ์ฌ์ฉํ๋ค -
๊ฐ๋ฅํ ๊ณ ์ ๋ ํฌ๊ธฐ(size)์ ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ค
-
๋์ ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ๊ฐ๋ฅํ ํ ๋ฏธ๋ฆฌ `reserve()``๋ฅผ ํธ์ถํ๋ค.
-
#define
์ผ๋ก ์ ์๋ ์์๋ ํญ์ ๊ดํธ๋ก ๊ฐ์ธ์ค๋ค#define NUM_CLASSES (1)
-
์์๋
#define
๋ณด๋คconst
์์ ๋ณ์๋ก ์ ์ธํ๋ค -
ํด๋์ค๋ฅผ ์ํธ ์ฐธ์กฐํ ๋๋
#include
๋ณด๋ค ์ ๋ฐฉ์ ์ธ(forward declaration)์ ์ต๋ํ ์ด์ฉํ๋ค -
๋ชจ๋ ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ๋ ๋ฐ๋์ ๊ณ ์น๋ค
-
ํ ์ค์ ๋ณ์ ํ๋๋ง ์ ์ธํ๋ค
-
ํ๋ฆฐ ๋ฐฉ์
int counter = 0, index = 0;
-
์ฌ๋ฐ๋ฅธ ๋ฐฉ์
int counter = 0; int index = 0;
-
์ด๋์ผ ๊ฐ ๋ณ์์ ๋ํด ์ฃผ์์ ๋จ๊ฒจ ์ด ๋ณ์๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง๋ฅผ ์๋ ค์ค ์ ์๊ธฐ ๋๋ฌธ์ด๋ค
-
-
์ง์ญ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ๋ NRVO์ ์ด์ ์ ํ์ฉํ๋ค. ์ด๋ ํจ์ ๋ด์ ํ๋์ return๋ฌธ ๋ง ์ด๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ์ด๊ฒ์ ๊ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ฐํํ ๋๋ง ์ ์ฉ๋๋ค.
-
struct
๋class
์์ ์ด๊ธฐํ ํ ๊ฐ ๋ณ๊ฒฝ์ ๋ง์ผ๋ ค๊ณconst
๋ฉค๋ฒ ๋ณ์๋ฅผ ์ฐ์ง ์๋๋ค. ์ฐธ์กฐ(&
) ๋ฉค๋ฒ๋ณ์์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง -
๋ฉค๋ฒ ๋ณ์๋ฅผ ์ด๊ธฐํํ ๋๋ ์ด๊ธฐํ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ค
-
์ปดํ์ผ ๋์ค assertion์ด ํ์ํ๋ค๋ฉด
static_assert
๋ฅผ ์ฌ์ฉํ๋ค -
override
์final
ํค์๋๋ฅผ ๋ฐ๋์ ์ฌ์ฉํ๋ค -
ํญ์
enum class
๋ฅผ ์ฌ์ฉํ๋คenum class eDirection { North, South }
-
๊ฐ๋ฅํย
Assert
ย ๋์ ยstatic_assert
ย ๋ฅผ ์ฌ์ฉํ๋ค. -
ํฌ์ธํฐ์ย
NULL
ย ๋์ ยnullptr
ย ๋ฅผ ์ฌ์ฉํฉ๋๋ค. -
๊ฐ์ฒด์ ์๋ช ์ด ํด๋์ค ๋ด์์๋ง ์ฒ๋ฆฌ๋๋ ๊ฒฝ์ฐย
unique_ptr
ย ๋ฅผ ์ฌ์ฉํ๋ค. (์ฆ, ๊ฐ์ฒด ์์ฑ์ ์์ฑ์์์, ๊ฐ์ฒด ํ๊ดด๋ ์๋ฉธ์์์) -
์ ์ฉ ๊ฐ๋ฅํ ๊ณณ์ด๋ผ๋ฉด ๋ฒ์๊ธฐ๋ฐ
for
๋ฌธ์ ์ฌ์ฉํ๋ค. -
๋ฐ๋ณต์๋ย
new
ย ํค์๋๊ฐ ๊ฐ์ ์ค์ ์์ด์, ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋ ์ง ๋ช ํํ๊ฒ ๋๋ฌ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉดยauto
ย ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. -
std::move
๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ๋ฐํ ๊ฐ์ ์ต์ ํํ์ง ์๋๋ค. ์ด๋ด ๊ฒฝ์ฐ,ย ์๋ NRVO ์ต์ ํ๊ฐ ์ ์ฉ๋์ง ์๋๋ค. -
์ด๋ ์์ฑ์(move constructor)์ ์ด๋ ๋์ ์ฐ์ฐ์(move assignment operator)๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.
-
๋จ์ ์์ ๋ณ์์๋ย
const
ย ๋์ ยconstexpr
ย ์ ์ฌ์ฉํ๋ค.์ ์ฉ ์ :
const int DEFAULT_BUFFER_SIZE = 65536;
์ ์ฉ ํ:
constexpr int DEFAULT_BUFFER_SIZE = 65536;
-
๋๋ค ํจ์์ ๊ฒฝ์ฐ
sort
๋ฑ์ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋ ๋ฑ์ด ์๋๋ผ๋ฉด ์ง์ํ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ, ์ฌ์ฉํ๋๋ผ๋ ๊ธธ์ด๊ฐ ๊ณผ๋ํ๊ฒ ๊ธธ์ด์๋ ์๋๋ค
-
include
์ ์ฒ๋ฆฌ๋ฌธ ๋ธ๋ก๊ณผ ์ฝ๋ ๋ณธ๋ฌธ ์ฌ์ด์ ๋ฐ๋์ ๋น ์ค์ด ์์ด์ผ ํ๋ค -
ํญ(tab)์ ๋น์ฃผ์ผ ์คํ๋์ค ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๋ฉฐ, ๋น์ฃผ์ผ ์คํ๋์ค๋ฅผ ์ฌ์ฉํ์ง ์์ ์ ๋์ด์ฐ๊ธฐ 4์นธ์ ํญ์ผ๋ก ์ฌ์ฉํ๋ค.
-
์ค๊ดํธ(
{
)๋ฅผ ์ด ๋๋ ์ธ์ ๋ ์๋ก์ด ์ค์ ์ฐ๋ค. -
์ค๊ดํธ ์(
{ }
)์ ์ฝ๋๊ฐ ํ ์ค๋ง ์๋๋ผ๋ ๋ฐ๋์ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ๋ค.if (bSomething) { return; }
-
if
-else
๋ธ๋ก์ ์ฌ์ฉํ ๊ฒฝ์ฐelse
๋if
์ ์ค๊ดํธ ๋ค์ ์ค์์๋ถํฐ ์์ฑํ๋คif (bHaveUnrealLicense) { InsertYourGameHere(); } else { CallMarkRein(); }
-
ํฌ์ธํฐ๋ ์ฐธ์กฐ ๊ธฐํธ๋ ์๋ฃํ์ ๋ถ์ธ๋ค.
int& number; int* number;
-
์ด๊ธฐํ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด ๋ฉค๋ฒ ๋ณ์๋ฅผ ์ด๊ธฐํํ ๋๋ ์๋์ ๊ฐ์ ํฌ๋งท์ ๋ฐ๋ผ ํ ์ค์ ๋ณ์ ํ๋์ฉ ์ด๊ธฐํํ๋ค.
- ํ๋ฆฐ ๋ฐฉ์:
MyClass::MyClass(const int var1, const int var2) :mVar1(var1), mVar2(var2), mVar3(0) {
- ์ฌ๋ฐ๋ฅธ ๋ฐฉ์:
MyClass::MyClass(const int var1, const int var2) : mVar1(var1) , mVar2(var2) , mVar3(0) {
- Visual C++: ํ๋ก์ ํธ ์ค์ ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ํญ์ ์์ฑ ์ํธ(property sheets)์์ ๋ณ๊ฒฝ ํ๋ค.
- ํ๋ก์ ํธ ์ค์ ์์ ์ปดํ์ผ ๊ฒฝ๊ณ ๋ฅผ ๋นํ์ฑํ ํ์ง ์๋๋ค. ๊ทธ ๋์ , ์ฝ๋์์ย
#pragma
ย ๋ฅผ ์ฌ์ฉํ๋ค.
<stdint>
์ ์ ์๋ C++11 ์ดํ ์ถ๊ฐ๋ ํ๋ค์ ์ฌ์ฉํ๋ค
-
bool
ย : ๋ถ๋ฆฌ์ธํ (bool
์ ํฌ๊ธฐ๋ฅผ ์ ๋๋ก ์ถ์ ํด์๋ ์๋๋ค). - TODO(์บ๋ฆญํฐ ๊ด๋ จ ์ถ๊ฐ ํ์)
-
uint8_t
ย : ๋ฌด๋ถํธ ๋ฐ์ดํธ (1 ๋ฐ์ดํธ). -
int8_t
ย : ์ ๋ถํธ ๋ฐ์ดํธ (1 ๋ฐ์ดํธ). -
uint16_t
ย : ๋ฌด๋ถํธ "๋จ์ ์short" (2 ๋ฐ์ดํธ). -
int16_t
ย : ์ ๋ถํธ "๋จ์ ์short" (2 ๋ฐ์ดํธ). -
uint23_t
ย : ๋ฌด๋ถํธ ์ ์ (4 ๋ฐ์ดํธ). -
int32_t
ย : ์ ๋ถํธ ์ ์ (4 ๋ฐ์ดํธ). -
uint64_t
ย : ๋ฌด๋ถํธ "4๋ฐฐ ๋จ์ดquad word" (8 ๋ฐ์ดํธ). (Microsoft์ Window.h์WORD
๋ผ๋ 16๋นํธ ๋ฌด๋ถํธ ์ ์์ 4๋ฐฐ ํฌ๊ธฐ๋ฅผ ๊ฐ์์ ์๋ฏธ) -
int64_t
ย : ์ ๋ถํธ "4๋ฐฐ ๋จ์ดquad words" (8 ๋ฐ์ดํธ). -
float
ย : ๋จ์ ๋ฐ๋ ๊ณ ์ ์์์ (4 ๋ฐ์ดํธ). -
double
ย : 2๋ฐฐ์ ๋ฐ๋ ๊ณ ์ ์์์ (8 ๋ฐ์ดํธ).
-
์ ์ด์ ์ฝ๋ ์์ฒด๊ฐ document๊ฐ ๋ ์ ์๊ฒ ์์ฑํ๋ผ
// Bad: t = s + l - b; // Good: TotalLeaves = SmallLeaves + LargeLeaves - SmallAndLargeLeaves;
-
์๋ฏธ์๋ ์ฃผ์์ ์์ฑํ์
// Bad: // increment Leaves ++Leaves; // Good: // we know there is another tea leaf ++Leaves;
-
์ฝ๋๋ฅผ ์ ๋๋ก ๋ชป ์ง ๊ฑฐ์ ์ฃผ์์ ๋ฃ์ด์ฃผ์ง ๋ง๋ผ. ์ฐจ๋ผ๋ฆฌ ๋ค์ ์ฝ๋๋ฅผ ์ง๋ผ.
// Bad: // total number of leaves is sum of // small and large leaves less the // number of leaves that are both t = s + l - b; // Good: TotalLeaves = SmallLeaves + LargeLeaves - SmallAndLargeLeaves;
-
์ฝ๋์ ๋ด์ฉ์ด ์๋ฐ๋์ด์๋ ์๋๋ค
// Bad: // never increment Leaves! ++Leaves; // Good: // we know there is another tea leaf ++Leaves;