μ μ μ‘΄μ κΈ°κ°, λ΄λΆ λ§ν¬
μλ‘ λ€λ₯Έ νμΌμμ μλ‘ λ€λ₯Έ λ³μλ€μκ² κ°μ μ΄λ¦μ μ¬μ©νλ λ²
κ°μ μ΄λ¦μΌλ‘ μ μλ μΈλΆ λ³μλ₯Ό νλμ νμΌμμ static μΈλΆ λ³μλ‘ μ μΈνλ€λ©΄, staticμΌλ‘ μ μΈλ λ³μλ κ·Έ νμΌμμλ§ μ¬μ©λλ λ³μλ‘ μΈμλλ€.
μ μ κΈ°μ΅ μ‘΄μ μκ°, λ§ν¬ μμ
λΈλ‘ μμμ staticμ μ¬μ©νλ©΄, staticμ΄ μ§μ λ³μλ₯Ό μ μ κΈ°μ΅ μ‘΄μ μκ°μ κ°κ² λ§λ λ€. μ΄λ° λ³μλ€μ λΈλ‘ μμμλ§ μλ €μ§μ§λ§ κ·Έ λΈλ‘μ΄ νλνμ§ μλ λμμλ κ³μ μ‘΄μ¬νλ€. κ·Έλ¬λ―λ‘ μ μ μ§μ λ³μλ ν¨μμ νΈμΆκ³Ό νΈμΆ μ¬μ΄μμλ κ° λ³΄μ‘΄ κ°λ₯
κΈ°μ΅ κ³΅κ° μ νμ
auto(C++11μμλ μ νμμμ λΉ μ§)
register
static
extern
thread_local(C++11μμ μΆκ°λ¨)
mutable
νλμ μ μΈμλ μ λͺ©λ‘μ μλ μ νμλ₯Ό νλλ§ μ¬μ©ν μ μλ€.
κ·Έλ¬λ thread_localλ§μ static λλ externκ³Ό ν¨κ» μ¬μ© κ°λ₯
c++11 μ΄μ μλ auto ν€μλλ μ΄λ€ λ³μκ° μλ λ³μλΌλ μ μΈμ μ¬μ©λ¨, μ΄νμλ μλν λ³νμ μ¬μ©
register ν€μλλ λ μ§μ€ν° κΈ°μ΅ κ³΅κ°μ μ§μ νλ μ μΈμ μ¬μ©λ¨.
c++11μμλ μλ λ³μλΌλ κ²μ μλ―Ένλ λͺ μμ λ°©λ²
static ν€μλλ νμΌ λ²μ μ μΈμ μ¬μ©λ λ λ΄λΆ λ§ν¬λ₯Ό λνλ΄λ©°, μ§μ μ μΈμ μ¬μ©λ λλ μ§μ λ³μλ₯Ό μν μ μ κΈ°μ΅ μ‘΄μ μκ°μ κ°λ¦¬ν¨λ€.
extern ν€μλλ μ°Έμ‘° μ μΈμ λνλΈλ€. κ·Έ μ μΈμ λ€λ₯Έ κ³³μ μ΄λ―Έ μ μλμ΄ μλ λ³μλ₯Ό μ°Έμ‘°νλ€.
thread_local ν€μλλ λ³μμ μ‘΄μ μκ°μ΄ λ³μλ₯Ό ν¬ν¨νλ μ€λ λκ° μ‘΄μ μκ°μ΄λ€.
Cv-μ νμ
const
volatile
volatile ν€μλλ νλ‘κ·Έλ¨ μ½λκ° λ³κ²½νμ§ μλλΌλ νΉμ λ©λͺ¨λ¦¬ μμΉμ μλ κ°μ΄ λ³κ²½λ μ μλ€.
ex) μ§λ ¬ ν¬νΈλ‘λΆν° λ€μ΄μ€λ μκ°μ΄λ μ λ³΄κ° μ μ₯λμ΄ μλ νλμ¨μ΄ μμΉλ₯Ό μ§μνλ ν¬μΈν°λ₯Ό κ°μ§ κ²½μ°, νλ‘κ·Έλ¨μ΄ μλλΌ νλμ¨μ΄κ° κ·Έ λ©λͺ¨λ¦¬μ λ΄μ©μ λ³κ²½νλ€.
mutable
mutableμ νΉμ ꡬ쑰체(λλ ν΄λμ€)κ° constλ‘ μ μΈλμ΄ μλλΌλ νΉμ λ©€λ²λ₯Ό λ³κ²½ν μ μμμ λνλΈλ€.
struct data
{
char name[30];
mutable int accesses;
...
}
const data veep={"Clay cdd",0,...};
strcpy(veep.name,"Joef ef"); //νμ© x
veep.accesses++; //νμ© o
constμ λν 보좩
const μ μ λ³μλ λ΄λΆ λ§ν¬λ₯Ό κ°λλ‘ λν΄νΈλ‘ λ΄μ λλ€.
const int fingers = 10; //static const int fingers;μ κ°λ€.
μλ₯Ό λ€μ΄, μ΄λ€ ν€λ νμΌμ΄ μμλ€μ μ§ν©μ κ°μ§κ³ μκ³ , νλμ λ€μ€ νμΌ νλ‘κ·Έλ¨μ ꡬμ±νλ μ¬λ¬ νμΌμ΄ κ·Έ ν€λ νμΌμ λͺ¨λ μ¬μ©νλ€κ³ κ°μ . μ μ²λ¦¬κΈ°κ° ν€λ νμΌμ λ΄μ©μ κ°κ°μ μμ€ νμΌμ ν¬ν¨μν€κ³ λλ©΄, κ° μμ€νμΌμλ λ€μκ³Ό κ°μ μ μκ° λ€μ΄κ°λ€.
const int fingers=10;
const char *warning = "Wak!";
λ§μ½ μ μ const μ μΈμ΄ 보ν΅μ λ³μλ€μ²λΌ μΈλΆ λ§ν¬λ₯Ό κ°μ§κ³ μλ€λ©΄, μ μ λ³μλ νλμ νμΌμμλ§ μ μλλ―λ‘ μλ¬κ° λλ€.(νλμ νμΌλ§μ΄ μμ κ°μ μ μΈμ νκ³ λ€λ₯Έ νμΌλ€μ λͺ¨λ extern ν€μλλ₯Ό μ¬μ©ν΄μΌ ν¨, extren ν€μλκ° μλ μ μΈλ§μ΄ κ° μ΄κΈ°ν κ°λ₯)
extern ν€μλλ₯Ό μ¬μ©νμ¬ λν΄νΈλ‘ λμ΄μλ λ΄λΆ λ§ν¬λ₯Ό κ°μ§ μ μλ€.
extern const states=50;//μΈλΆ λ§ν¬
μ΄ μμλ₯Ό μ¬μ©νλ λͺ¨λ νμΌμμ extern ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈν΄μΌ ν¨.
ν¨μμ λ§ν¬
λͺ¨λ ν¨μλ μ μ κΈ°μ΅ μ‘΄μ μκ°μ κ°μ§λ€.
ν¨μλ μΈλΆ λ§ν¬λ₯Ό κ°μ§λ€. (μ¬λ¬ νμΌμ΄ ν¨μλ₯Ό 곡μ κ°λ₯)
ν¨μ μνμ externμ μ μ©νμ¬ κ·Έ ν¨μκ° λ€λ₯Έ νμΌμ μ μλμ΄ μλ€λ κ²μ λνλΌ μ μμ§λ§ μ νμ μ
static ν€μλλ₯Ό μ¬μ©νμ¬ ν¨μμ λ΄λΆ λ§ν¬ λΆμ¬ κ°λ₯
ν¨μμ μ¬μ©λ²μλ₯Ό νλμ νμΌλ‘ μ ν.
static int private(double x);
...
static int private(double x);
{
...
}
κΈ°μ΅ κ³΅κ° νμκ³Ό λμ λμ
λμ λ©λͺ¨λ¦¬λ μ¬μ© λ²μλ λ§ν¬ κ·μΉμ μν΄μκ° μλ, newμ delete μ°μ°μμ μν΄ λ€λ£¨μ΄μ§λ€.
κ·Έλ¬λ―λ‘ λμ λ©λͺ¨λ¦¬λ νλμ ν¨μλ‘λΆν° λμ λ°κ³ , λ€λ₯Έ ν¨μμμ ν΄μ κ°λ₯.
κΈ°μ΅ κ³΅κ° νμμ΄λΌλ κ°λ μ΄ λμ λ©λͺ¨λ¦¬μλ μ μ©λμ§ μμ§λ§, λμ λ©λͺ¨λ¦¬λ₯Ό μΆμ νλ λ° μ¬μ©λλ μλ λ° μ μ ν¬μΈν° λ³μμλ μ μ©λλ€.
ex)
float * p_fees = new float[20];
λ©λͺ¨λ¦¬κ° newμ μν΄μ λμ λκ³ , deleteμ μν΄ ν΄μ λ λκΉμ§ λ©λͺ¨λ¦¬μ μ μ§λλ€. κ·Έλ¬λ p_fees ν¬μΈν°λ μ΄ λ³μκ° μ μΈλμ΄ μλ ν¨μκ° μ’ λ£λ λ μ¬λΌμ§λ€. κ·Έλ¬λ―λ‘ λμ λ°μ λ©λͺ¨λ¦¬λ₯Ό λ€λ₯Έ ν¨μμλ μ¬μ©νκ³ μΆμΌλ©΄, κ·Έ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό ν¨μμ μ λ¬νκ±°λ 리ν΄ν΄μΌ ν¨.
p_feesλ₯Ό μΈλΆ λ§ν¬λ₯Ό κ°λλ‘ μ μΈνλ©΄, νμΌμμ κ·Έ μ μΈμ λ€μ μ€λ ν¨μμμ p_fees ν¬μΈν° μ¬μ© κ°λ₯.
extern float *p_fees;