1. decltype ํค์๋
decltype ํค์๋๋ ์ธ์๋ก ์ง์ ํ ํํ์์ ํ์ ์ ์์๋ธ๋ค.
int x = 123;
decltype(x) y = 456;
์ด๋ ๊ฒ ์์ฑํ๋ฉด ์ปดํ์ผ๋ฌ๋ y์ ํ์ ์ด x์ ํ์ ์ธ int๋ผ๊ณ ์ถ๋ก ํ๋ค. decltype์ ๋ ํผ๋ฐ์ค๋ const์ง์ ์๋ฅผ ์ญ์ ํ์ง ์๋๋ค๋ ์ ์์ auto์ ๋ค๋ฅด๋ค. ํ ํ๋ฆฟ์ ์ฌ์ฉํ ๋ ์๋นํ ๊ฐ๋ ฅํ ํจ๊ณผ๋ฅผ ๋ฐํํ๋ค.
2. ๋ก ์คํธ๋ง ๋ฆฌํฐ๋ด(raw string liternal)
์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ์์ฑํ ์คํธ๋ง ๋ฆฌํฐ๋๋ก์, ๊ทธ ์์ ๋ด๊ธด ์ธ์ฉ๋ถํธ๋ฅผ ์ด์ค์ผ์ดํ ์คํ์ค๋ก ํํํ ํ์๊ฐ ์๊ณ , \t, \n๊ฐ์ ์ด์ค์ผ์ดํ ์ํ์ค๋ฅผ ์ผ๋ฐ ํ ์คํธ๋ก ์ทจ๊ธํ๋ค.
๋ฌธ๋ฒ: R " ( <๋ด์ฉ> ) " const char* str = R"(Hello "Pinko")" ;
3. static
(1). static ๋ฉ์๋
static ๋ฉ์๋๋ ํน์ ๊ฐ์ฒด์ ๋ํด ํธ์ถ๋์ง ์๊ธฐ ๋๋ฌธ์ this ํฌ์ธํฐ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ ์ด๋ค ๊ฐ์ฒด์ non-static ๋ฉค๋ฒ์ ์ ๊ทผํ๋ ์ฉ๋๋ก ํธ์ถํ ์ ์๋ค. static ๋ฉ์๋๋ ๊ทผ๋ณธ์ ์ผ๋ก ์ผ๋ฐ ํจ์์ ๋น์ทํ์ง๋ง ํด๋์ค์ private static์ด๋ protected static ๋ฉค๋ฒ๋ง ์ ๊ทผํ ์ ์๋ค๋ ์ ์ ๋ค๋ฅด๋ค. ๋ํ ๊ฐ์ ํ์ ์ ๊ฐ์ฒด๋ฅผ ํฌ์ธํฐ๋ ๋ ํผ๋ฐ์ค๋ก ์ ๋ฌํ๋ ๋ฐฉ๋ฒ๋ฑ์ ์ฌ์ฉํด์ ๊ทธ ๊ฐ์ฒด๋ฅผ static ๋ฉ์๋์์ ๋ณผ ์ ์๊ฒ ๋ง๋ค์๋ค๋ฉด ํด๋์ค์ non-static private๋ ๋ protected ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋ค.
(2). static ๋ฐ์ดํฐ ๋ฉค๋ฒ
ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด๋ง๋ค ๋๊ฐ์ ๋ณ์๋ฅผ ๊ฐ์ง๋ ๊ฒ์ ๋นํจ์จ์ ์ด๊ฑฐ๋ ๋ฐ๋์งํ์ง ์์ ์ ์๋ค. static ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ ๊ฐ์ฒด๊ฐ ์๋ ํด๋์ค์ ์ํ๋ค. ์ด๋ ์ ์ญ ๋ณ์์ ๋น์ทํ์ง๋ง ์์ ์ด ์ํ ํด๋์ค ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ ์๋ค.
์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํด๋ ๋์ง๋ง ์ผ๋ฐ ๋ณ์๋ ๋ฐ์ดํฐ ๋ฉค๋ฒ์ ๋ฌ๋ฆฌ ๊ธฐ๋ณธ์ ์ผ๋ก 0์ผ๋ก ์ด๊ธฐํ๋๋ค. static ํฌ์ธํฐ๋ nullptr ๋ก ์ด๊ธฐํ๋๋ค. ๋ฉค๋ฒ ๊ณต๊ฐ์ ํ ๋นํ๊ณ ๊ฐ์ ์ด๊ธฐํํ๋ ค๋ฉด ์์คํ์ผ์ size_t ํด๋์ค::๋ณ์๋ช
= value;๋ก ์ด๊ธฐํ ํด์ค๋ค.
(3). static ํค์๋
- ์ ์ญ ๋ณ์ static : static ํค์๋๊ฐ ์ ์ญ ๋ณ์์์ ์ฌ์ฉ๋ ๋ '๋ด๋ถ ์ฐ๊ฒฐ ์์ฑ'์ ์ ์ฉํ๋ค. ์ฆ, ๋ณ์๊ฐ ์ ์๋ ์์ค ํ์ผ ๋ด์์ ์ฌ์ฉ ๊ฐ๋ฅํจ์ ์๋ฏธํ๋ค. (์ ์ญ ๋ณ์๋ ํ์ผ ์ค์ฝํ(or ์ ์ญ ์ค์ฝํ :: )๋ฅผ ๊ฐ์ง๋ค.)
- ํจ์ ์์ static ๋ณ์: ํน์ ์ค์ฝํ ์์์๋ง ๊ฐ์ ์ ์งํ๋ ๋ก์ปฌ(์ง์ญ) ๋ณ์๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค. ํจ์ ์์์ static์ผ๋ก ์ง์ ํ ๋ณ์๋ ๊ทธ ํจ์๋ง ์ ๊ทผํ ์ ์๋ ์ ์ญ ๋ณ์์ ๊ฐ๋ค. ์ด๋ค ํจ์์์ ์ด๊ธฐํ ์์ ์ํ ์ฌ๋ถ๋ฅผ ๊ธฐ์ตํ๋ ์ฉ๋๋ก ๋ง์ด ์ฌ์ฉํ๋ค.
void incrementAndPrint()
{
static int s_value = 1; // 'static' ํค์๋๋ฅผ ์ฌ์ฉํ '์ ์ ์๋ช
์ฃผ๊ธฐ', ์ด ์ค์ ํ๋ฒ๋ง ์คํ๋๋ค.
++s_value;
std::cout << s_value << '\n';
} // s_value๋ ์ฌ๊ธฐ์ ์๋ฉธ๋์ง ์์ง๋ง, ์ ๊ทผํ ์ ์๊ฒ๋๋ค.
์ถ์ฒ: https://boycoding.tistory.com/169 [์๋
์ฝ๋ฉ:ํฐ์คํ ๋ฆฌ]
(5). static๊ณผ extern ํค์๋์ ๋ด๋ถ/ ์ธ๋ถ ๋งํฌ โ โ โ โ โ
๋งํฌ๋? ๊ฐ์ ์ด๋ฆ์ ์ฌ๋ฌ ์๋ณ์๊ฐ ๊ฐ์ ์๋ณ์๋ฅผ ์ฐธ์กฐํ๋์ง๋ฅผ ๊ฒฐ์ ํ๋ค. ๋งํฌ๊ฐ ์๋ ๋ณ์๋ ์ ํ๋ ๋ฒ์์์๋ง ์ฐธ์กฐํ ์ ์๋ค. ์ง์ญ๋ณ์๊ฐ ๋งํฌ๊ฐ ์๋ ๋ณ์์ ์์ด๋ค.
static๊ณผ ๊ด๋ จ๋ ํค์๋๋ก๋ extern์ด ์๋ค. const์ typedef๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด๋ถ ๋งํฌ๋ก ์ฒ๋ฆฌ๋๋ค. ์ฌ๊ธฐ์ extern์ ๋ถ์ด๋ฉด ์ธ๋ถ ๋งํฌ๊ฐ ์ ์ฉ๋๋ค. ํ์ง๋ง extern์ ์ ์ฉ ๊ณผ์ ์ ์ข ๋ณต์กํ๋ค. ์ด๋ค ์ด๋ฆ์ extern์ผ๋ก ์ง์ ํ๋ฉด ์ปดํ์ผ๋ฌ๋ ์ด๋ฅผ ์ ์๊ฐ ์๋ ์ ์ธ๋ฌธ์ผ๋ก ์ทจ๊ธํ๋ค. ๋ณ์๋ฅผ extern์ผ๋ก ์ง์ ํ๋ฉด ์ปดํ์ผ๋ฌ๋ ๊ทธ ๋ณ์์ ๋ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ์ง ์๋๋ค. ๋ฐ๋ผ์ ๊ทธ ๋ณ์๋ฅผ ์ ์ํ๋ ๋ฌธ์ฅ์ ๋ฐ๋ก ์์ฑํด์ผ ํ๋ค.
[ static๊ณผ extern์ ๋ณ์ ๋น๊ต ]
- ๋ด๋ถ ๋งํฌ๊ฐ ์๋ ๋ณ์๋ฅผ static ๋ณ์๋ผ๊ณ ํ๋ค. static ๋ณ์๋ ๋ณ์๊ฐ ์ ์๋ ์์คํ์ผ ๋ด์์ ์ด๋์๋ ์ ๊ทผํ ์ ์์ง๋ง, ์์ค ํ์ผ ์ธ๋ถ์์๋ ์ฐธ์กฐํ ์ ์๋ค.
- ์ธ๋ถ ๋งํฌ๊ฐ ์๋ ๋ณ์๋ extern๋ณ์๋ผ๊ณ ํ๋ค. extern๋ณ์๋ ์ ์๋ ์์ค ํ์ผ๊ณผ ๋ค๋ฅธ ์์ค ํ์ผ ๋ชจ๋ ์ ๊ทผํ ์ ์๋ค.
extern์ด ๋ฐ๋์ ํ์ํ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์ด File.cpp๊ณผ ๊ฐ์ ๋ค๋ฅธ ์์ค ํ์ผ(์ธ๋ถ)์์ x์ ์ ๊ทผํ ๊ฒ ๋ง๋ค ๋ ํ์ํ๋ค.
#include<iostream>
extern int x;
int main {
std::cout << x << std::endl;
}
File.cpp์์ x๋ฅผ extern์ผ๋ก ์ ์ธํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ์ผ์ ์๋ x๋ฅผ ์ฌ๊ธฐ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค. main( )์์ x๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ปดํ์ผ๋ฌ๊ฐ x์ ์ ์ธ๋ฌธ์ ์์์ผ ํ๋ค. x๋ฅผ ์ ์ธํ๋ ๋ฌธ์ฅ์ extern์ ๋ถ์ด์ง ์์ผ๋ฉด ์ด ๋ฌธ์ฅ์ด x๋ฅผ ์ ์ธํ๋ ๊ฒ์ด ์๋๋ผ ์ ์ํ๋ค๊ณ ํ๋จํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด๋ฒ๋ฆฐ๋ค. ๊ทธ๋ฌ๋ฉด ๋งํฌ ๋จ๊ณ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. (์ ์ญ ์ค์ฝํ์ x๋ผ๋ ๋ณ์๊ฐ ๋๊ฐ๋ ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค) ์ด๋ด ๋๋ extern์ ๋ถ์ฌ์ ์ ์ญ ๋ณ์๋ก ๋ง๋ค๋ฉด ์ฌ๋ฌ ์์ค ํ์ผ์์ ๊ณต์ ํ ์ ์๋ค.
4. const
(1). const ๋ฉ์๋
์ด๋ค ๋ฉ์๋๊ฐ ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค๊ณ ๋ณด์ฅํ๊ณ ์ถ์ ๋ const ํค์๋๋ฅผ ๋ถ์ธ๋ค. const๋ ๋ฉ์๋ ํ๋กํ ํ์
์ ์ผ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ์ฝ๋์์๋ ๋ฐ๋์ ์ ์ด์ผ ํ๋ค.
๊ฐ์ฒด๋ฅผ const๋ก ์ ์ธํ์ง ์์๋ค๋ฉด ๊ทธ ๊ฐ์ฒด์ cosnt ๋ฉ์๋์ non-const ๋ฉ์๋๋ฅผ ๋ชจ๋ ํธ์ถํ ์ ์๋ค. ๋ฐ๋ฉด ๊ฐ์ฒด๋ฅผ const๋ก ์ ์ธํ๋ค๋ฉด ๊ทธ ๊ฐ์ฒด์ const ๋ฉ์๋๋ง ํธ์ถํ ์ ์๋ค.
const ๊ฐ์ฒด๋ ์๋ฉธ๋๋ค. ๋ฐ๋ผ์ ์ธ์ ๋ ์ง ์๋ฉธ์๊ฐ ํธ์ถ๋ ์ ์๋ค. ๊ทธ๋ ๋ค ํ๋๋ผ๋ ์๋ฉธ์๋ฅผ const๋ก ์ ์ธํ ์๋ ์๋ค.
(2). constexpr ํค์๋
c++์์ ์ ๊ณตํ๋ ์์ ํํ์์ด๋ ๊ฐ๋ ์ด ํ์ํ ๋๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด ๋ฐฐ์ด์ ์ ์ํ ๋ ํฌ๊ธฐ๋ฅผ ์์ ํํ์์ผ๋ก ์ง์ ํด์ผ ํ๋ค. ์์ํํ์์ ์ปดํ์ผ ์๊ฐ์ ๊ณ์ฐ๋๋ค.
const int getArrSize {return 5;} // ๋ฐฐ์ด ํฌ๊ธฐ ์ก๊ธฐ ๋ถ๊ฐ๋ฅ
constexpr int getArrSize {return 5;} // ๋ฐฐ์ด ํฌ๊ธฐ ์ก๊ธฐ ๊ฐ๋ฅ
[ ์ ์ฝ์ฌํญ ]
- ๋ฆฌํด ํ์
์ด ๋ฐ๋์ ๋ฆฌํฐ๋ ํ์
์ด์ด์ผ ํ๋ค.
- ํด๋์ค์ ๋ฉค๋ฒ๊ฐ constexpr ํจ์์ผ ๋๋ virtual๋ก ์ ์ธํ ์ ์๋ค.
- constexpr ํจ์์ ๋งค๊ฐ๋ณ์๋ ๋ฐ๋์ ๋ฆฌํฐ๋ ํ์
์ด์ด์ผ ํ๋ค.
- dynamic_cast( )์ reinterpret_cast( )๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- new์ delete๋ ์ฌ์ฉํ ์ ์๋ค.
5. ์ธ๋ผ์ธ(inlining)
(1). ์ธ๋ผ์ธ(inlining) ๋ฉ์๋
#define๋งคํฌ๋ก๋ณด๋ค ์ธ๋ผ์ธ ๋ฉ์ค๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์์ ํ๋ค. ์ธ๋ผ์ธ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ค๋ฉด ๋ฉ์๋ ์ ์ ์ฝ๋์์ ์ด๋ฆ ์์ inline ํค์๋๋ฅผ ์ง์ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ปดํ์ผ๋ฌ๋ ํจ์ ํธ์ถํ๋ ๋ถ๋ถ์ ํจ์ ํธ์ถ๋ก ์ฒ๋ฆฌํ์ง ์๊ณ , ๊ทธ ํจ์์ ๋ณธ๋ฌธ์ ๊ณง๋ฐ๋ก ์ง์ด๋ฃ๋๋ค.
[ ์ ์ฝ์ฌํญ ]
์ธ๋ผ์ธ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์ฝ๋์์ ์ด๋ฅผ ์ ์ํ๋ ์ฝ๋์ ์ ๊ทผํ ์ ์์ด์ผ ํ๋ค. ์ปดํ์ผ๋ฌ๊ฐ ๋ฉ์๋ ์ ์ ์ฝ๋๋ฅผ ๋ณผ ์ ์์ด์ผ ๋ฉ์๋ ํธ์ถ ๋ถ๋ถ์ ๋ณธ๋ฌธ์ ๋์จ ์ฝ๋๋ก ๋์ฒดํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ธ๋ผ์ธ ๋ฉ์๋๋ ๋ฐ๋์ ํ๋กํ ํ์
๊ณผ ๊ตฌํ ์ฝ๋๋ฅผ ํค๋ ํ์ผ์ ์์ฑํ๋ค.
(2). (c++17) ์ธ๋ผ์ธ ๋ณ์
c++17๋ถํฐ static ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ฅผ inline์ผ๋ก ์ ์ธํ ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ์์ค ํ์ผ์ ๊ณต๊ฐ์ ๋ฐ๋ก ํ ๋นํ์ง ์์๋ ๋๋ค.
class ๋ธ๋ผ๋ธ๋ผ
{
private:
static inlin size_t ๋ณ์๋ช = 0;
}
ํด๋์ค์์ ์ด๋ ๊ฒ ์ ์ธํ๋ฉด ์์ค ํ์ผ์์ size_t ํด๋์ค::๋ณ์๋ช ;๋ฅผ ์ถ๊ฐํ์ง ์์๋ ๋๋ค.
6. mutable ๋ฐ์ดํฐ ๋ฉค๋ฒ
ํ์๋ฅผ ์ธ๋ ์นด์ดํฐ ๋ณ์๋ฅผ mutable(๋ฎคํ ๋ธ)๋ก ์ ์ธํด์ ์ปดํ์ผ๋ฌ์ ์ด ๋ณ์๋ฅผ const ๋ฉ์๋์์ ๋ณ๊ฒฝํ ์ ์๋ค๊ณ ์๋ ค์ฃผ๋ฉด ๋๋ค.
7. ๋ช ์์ ์ผ๋ก ์ค๋ฒ๋ก๋ฉ ์ ๊ฑฐํ๊ธฐ
์ปดํ์ผ๋ฌ๊ฐ ์๋ฃํ์ ๋ง์ง ์๋ ๊ฐ๋ฅผ ๋ฃ์์๋ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๋ง ์ถ๋ ฅํ๊ณ ๊ฐ์ ๋ด๋ถ์ ์ผ๋ก ๋ณํํด๋ฒ๋ฆฌ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด์๋ ๋ช ์์ ์ผ๋ก ์ค๋ฒ๋ก๋ฉ์ ์ ๊ฑฐํด์ค์ผ ํ๋ค.
8. ๋น๋ก์ปฌ ๋ณ์์ ์ด๊ธฐํ ์์
์ ์ญ๋ณ์์ static ํด๋์ค ๋ฐ์ดํฐ ๋ฉค๋ฒ๋ ๋ชจ๋ main( )์ด ์์ํ๊ธฐ ์ ์ ์ด๊ธฐํ๋๋ค. ์ด๋ฌํ ๋ณ์๋ ์์ค ํ์ผ์ ์ ์ธ๋ ์์๋๋ก ์ด๊ธฐํ๋๋ค. ๊ทธ๋ฐ๋ฐ c++ํ์ค ๋น๋ก์ปฌ(nonlocal:๋ก์ปฌ์ด ์๋) ๋ณ์๊ฐ ์ฌ๋ฌ ์์ค ํ์ผ์ ์ ์ธ๋์ ๋ ์ด๊ธฐํํ๋ ์์๋ ๋ฐ๋ก ์ ํด๋์ง ์๋๋ค. ์ด๋ค ์์ค ํ์ผ์ x๋ ์ ์ญ ๋ณ์๊ฐ ์๊ณ , ๋ค๋ฅธ ํ์ผ์๋ y๋ผ๋ ์ ์ญ ๋ณ์๊ฐ ์์ ๋ ์ด๋ ๊ฒ์ด ๋จผ์ ์ด๊ธฐํ๋๋์ง๋ ์ ์ ์๋ค.
9. ํ์ ์จ๋ฆฌ์ด์ค
๊ธฐ์กด์ ์ ์ธ๋ ํ์ ์ ๋ค๋ฅธ ์ด๋ฆ์ ๋ถ์ด๋ ๊ฒ์ด๋ค. ํ์ ์ ์๋ก ์ ์ํ์ง ์๊ณ ๊ธฐ์กด ํ์ ์ ์ธ์ ๋ํ ๋์์ด๋ฅผ ์ ์ธํ๋ ๋ฌธ๋ฒ์ด๋ผ๊ณ ํ ์ ์๋ค. (ํ์ ์์ ์์ฒญ์์ฒญ ์...)
* ํจ์ ํฌ์ธํฐ์ ๋ํ ํ์ ์จ๋ฆฌ์ด์ค
ํจ์๋ ๋ด๋ถ์ ์ผ๋ก ํน์ ํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ง์ ๋๋ค. ๋ฌผ๋ก ํจ์์ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ์ ๊ฒฝ ์ธ ์ผ์ ๋ง์ง ์๋ค. ๊ทธ๋ฐ๋ฐ C++์์ ํจ์๋ฅผ ๋ฐ์ดํฐ ์ทจ๊ธํ ์ ์๋ค. ๋ค์ ๋งํด ํจ์์ ์ฃผ์๋ฅผ ๋ณ์๋ค๋ฃจ๋ฏ ์ฌ์ฉํ ์ ์๋ค.
ํจ์ ํฌ์ธํฐ์ ํ์ ์ ๋งค๊ฐ๋ณ์ ํ์ ๊ณผ ๋ฆฌํด ํ์ ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค. ํจ์ ํฌ์ธํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ ํ์ ์จ๋ฆฌ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ํ์ ์จ๋ฆฌ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ํ ์์ฑ์ ๊ฐ์ง ํจ์๋ค์ ํ์ ์ด๋ฆ ํ๋๋ก ๋ถ๋ฅผ ์ ์๋ค.
using Function = bool(*)(int, int);
void ParmFunction(int a, int b, Function func)
{
bool check = func(a, b);
}
ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ํจ์๋ก ์์ฑํ ์ ์๋๋ฐ ์ฃผ๋ชฉํ ๋ถ๋ถ์ Function์ ๋ณ์์ฒ๋ผ ์ ๋ฌํ๋๋ผ๋ ์ฌ์ ํ ์ผ๋ฐ ํจ์์ฒ๋ผ ํธ์ถํ ์ ์๋ค๋ ๊ฒ์ด๋ค. func(a, b);
10. ์ค์ฝํ (::)
์ค์ฝํ(์ ํจ๋ฒ์)๋ ๋ณ์, ํจ์ ํด๋์ค ์ด๋ฆ์ ๋น๋กฏํ์ฌ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ด๋ฆ์ ์ผ์ ํ ์ค์ฝํ์ ์ํ๋ค. ์ค์ฝํ๋ ๋ค์์คํ์ด์ค, ํจ์ ์ ์, ์ค๊ดํธ ๋ธ๋ก, ํด๋์ค ์ ์ ๋ฑ์ผ๋ก ์์ฑํ๋ค. ์ด๋ค ๋ณ์๋ ํจ์, ํด๋์ค๋ฅผ ์ฃผ์ด์ง ์ด๋ฆ์ผ๋ก ์ ๊ทผํ ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์ค์ฝํ๋ถํฐ ์์ํ์ฌ ์ ์ญ ์ค์ฝํ๊น์ง ๊ฒ์ํ๋ค.
11. ์ดํธ๋ฆฌ๋ทฐํธ
์ดํธ๋ฆฌ๋ทฐํธ๋ ํน์ ๋ฒคํฐ์์๋ง ์ ๊ณตํ๋ ์ ๋ณด๋ ์ต์ ์ ์์ค ์ฝ๋์ ์ถ๊ฐํ๋ ๋ฉ์ปค๋์ฆ์ด๋ค. c++11๋ถํฐ๋ ์์ฑ์ ๋ชจ๋ ์ด์ค ๋๊ดํธ๋ฅผ ์ด์ฉํ์ฌ [[์ดํธ๋ฆฌ๋ทฐํธ]]์ ๊ฐ์ ๋ฌธ๋ฒ์ผ๋ก ํ๊ธฐํ๋๋ก ํ์คํ๋๋ค. c++ ํ์ค์ ์ฌ์ฏ ๊ฐ์ง ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ง์ํ๋ค.
[[ carries_dependency ]] | |
[[ norturn ]] | ํจ์๊ฐ ํธ์ถํ ์ธก์ผ๋ก ์ ์ด๋ฅผ ๋ฆฌํดํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฃผ๋ก ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ฅผ ์ข ๋ฃ์ํค๊ฑฐ๋ ์ต์ ์ ์ ๋์ง๋ ํจ์์ ์ด ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ง์ ํ๋ค. |
[[ deprecated ]] | ๋ ์ด์ ์ง์ํ์ง ์๋ ๋์์ ์ง์ ํ ๋ ์ฌ์ฉํ๋ค. ํ์ฌ ์ฌ์ฉํ ์๋ ์์ง๋ง ๊ถ์ฅํ์ง ์๋ ๊ธฐ๋ฅ์์ ํ์ํ๋ค. ์ง์ ์ค๋จ ์ฌ์ ๋ฅผ ์ธ์๋ก ์ง์ ํ ์ ์๋ค. [[ deprecated ("Unsafe method") ]] void function( ) ; |
(c++17) [[ fallthrough ]] | switch๋ฌธ์์ ์๋์ ์ผ๋ก ํด์ค๋ฃจ๋ฅผ ์ ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. |
(c++17) [[ nodiscard ]] | ๊ฐ์ ๋ฆฌํดํ๋๋ก ์ ์๋ ํจ์์ [[nodiscard]]๋ฅผ ์ง์ ํ๋ฉด ๊ทธ ํจ์๋ฅผ ์ด์ฉํ๋ ์ฝ๋์์ ๋ฆฌํด ๊ฐ์ ์ฌ์ฉํ์ง ์์ ๋ ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ๋ฐ์ํ๋ค. |
(c++17) [[ maybe_unused ]] | ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํด๋ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ง ๋ง๋ผ๊ณ ์ปดํ์ผ๋ฌ์ ์ง์ํ ๋ ์ฌ์ฉํ๋ค. |
12. ๋ ํผ๋ฐ์ค
- ๋ ํผ๋ฐ์ค ๋ณ์๋ ๋ฐ๋์ ์์ฑํ์๋ง์ ์ด๊ธฐํํด์ผ ํ๋ค. (๋ ํผ๋ฐ์ค ๋ณ์๋ฅผ ํด๋์ค ๋ฐ์์ ์ ์ธ๋ง ํ๊ณ ์ด๊ธฐํํ์ง ์์ผ๋ฉด ์ปดํ์ผ๋ฌ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.)
- ์ ์ ๋ฆฌํฐ๋์ฒ๋ผ ์ด๋ฆ ์๋ ๊ฐ์ ๋ํด์๋ ๋ ํผ๋ฐ์ค๋ฅผ ์์ฑํ ์ ์๋ค. (But, const ๊ฐ์ ๋ํด์๋ ๋ ํผ๋ฐ์ค๋ฅผ ์์ฑ ํ ์์๋ค.)
[ ์ด์ ]
์์๊ฐ non-const๋ ํผ๋ฐ์ค์ด๊ธฐ ๋๋ฌธ์ด๋ค. unnamedRef1์ 5๋ผ๋ ์์๋ฅผ ์์ ํ๊ฒ ๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ ์ฑ๋ฆฝํ์ง ์๊ณ , ๋ฐ๋ฉด unnamedRef2๋ const ๋ ํผ๋ฐ์ค๋ก ์ ์ธํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์์ด ์ปดํ์ผ์ด ๋๋ค.
- ์์ ๊ฐ์ฒด์ ๋ํด non-const ๋ ํผ๋ฐ์ค๋ ๋ง๋ค ์ ์์ง๋ง const ๋ ํผ๋ฐ์ค๋ ์ผ๋ง๋ ์ง ๋ง๋ค ์ ์๋ค.
(1). ๋ ํผ๋ฐ์ค ๋์ ๋ณ๊ฒฝํ๊ธฐ
๋ ํผ๋ฐ์ค๋ ์ฒ์ ์ด๊ธฐํํ ๋ ์ง์ ํ ๋ณ์๋ง ๊ฐ๋ฆฌํจ๋ค. ๋ ํผ๋ฐ์ค๋ ํ ๋ฒ ์์ฑ๋๊ณ ๋๋ฉด ๊ฐ๋ฆฌํค๋ ๋์์ ๋ฐ๊ฟ ์ ์๋ค.
(2). ๋ ํผ๋ฐ์ค๋ ๋ชจ๋ ํ์ ์ ๋ํด์ ๋ง๋ค ์ ์๋ค.
int*& ptrRef = intP; //ptrRef๋ intP์ ๋ํ ๋ํผ๋ฐ์ค์ด๊ณ , intP๋ int์ ๋ํ ํฌ์ธํฐ์ด๋ค. ptrRef๋ฅผ ์์ ํ๋ฉด intP๊ฐ ๋ฐ๋๋ค. ๋ ํผ๋ฐ์ค๊ฐ ๊ฐ์ ธ์จ ์ฃผ์๋ ๊ทธ ๋ ํผ๋ฐ์ค๊ฐ ๊ฐ๋ฆฌํค๋ ๋ณ์์ ์ฃผ์์ ๊ฐ๋ค. (๋ ํผ๋ฐ์ค์ ์ฃผ์๋ ๊ฐ์ ๋ํ ํฌ์ธํฐ์ ๊ฐ๋ค.)
(3) ํฌ์ธํฐ์ ๋ ํผ๋ฐ์ค ์ฌ์ฉ โ โ โ
- ๊ฐ๋ฆฌํค๋ ์์น๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ์ฃผ์๊ฐ์ด nullptr์ด ๋ ์ ์๋ optional ํ์
์ ๋ฐ๋์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ์ปจ๋ค์ดํฐ์ ๋คํ์ฑ ํ์
์ ์ ์ฅํ ๋๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ๋งค๊ฐ๋ณ์๋ ๋ฆฌํด๊ฐ์ ์์ ๊ถ์ด ์ด๋์ ์๋์ง ๋ฐ์ ธ๋ด์ผ ํ๋ค. ๋ฉ๋ชจ๋ฆฌ์ ์์ ๊ถ์ด ๋ณ์๋ฅผ ๋ฐ๋ ์ฝ๋์ ์์ผ๋ฉด ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ํด์ ํ๋ ์ฑ
์์ ๊ทธ ์ฝ๋์ ์์ผ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๊ธฐ์์ด๋ฉด ์ค๋งํธ ํฌ์ธํฐ ! ๊ทธ๋ฌ๋ ์์ ๊ถ์ ์ด์ ํ ํ์๊ฐ ์๋ค๋ฉด ๋ ํผ๋ฐ์ค๋ก ์ ๋ฌํ๋ฉด ์ข๋ค.
Reference.
(๋์) ์ ๋ฌธ๊ฐ๋ฅผ ์ํ C++ (๊ฐ์ 4ํ)
- 11์ฅ C++์ ๊น๋ค๋กญ๊ณ ์ ๋ณ๋ ๋ถ๋ถ ์ ๋ฆฌ
'๐จ๐ปโ๐ป programming > โฝ c, c++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํ๋ ๊ฒ ๋ณด๋ค ๋ซ๊ฒ ์ง
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!