728x90
반응형
선언은 명령문이다. 변수가 static으로 선언되지 않으면 제어 thread가 선언을 통과할 때마다 초기화가 실행된다. 명령문이 사용될 수 있는 모든 곳에서 선언을 허용하는 이유는 프로그래머가 초기화되지 않은 변수로 인한 오류를 최소화하고 코드에서 더 나은 지역성을 허용할 수 있도록 하기 위한 것이다. 보유할 값이 있기 전에 변수를 도입해야 하는 이유는 거의 없다.
void f(vector<string>& v, int i, const char∗ p)
{
if (p==nullptr) return;
if (i<0 || v.siz e()<=i)
error("bad index");
string s = v[i];
if (s == p) {
// ...
}
// ...
}
실행 코드 뒤에 선언을 배치하는 기능은 초기화 후 객체 값이 변경되지 않는 프로그래밍의 단일 할당 스타일과 많은 상수에 필수적이다. 사용자 정의 유형의 경우 적절한 intializer를 사용할 수 있을 때까지 변수 정의를 연기하면 성능이 향상될 수도 있다.
void use()
{
string s1;
s1 = "The best is the enemy of the good.";
// ...
}
이 요구된 기본 초기화(빈 문자열)는 할당에 뒷 따른다. 이것은 원하는 값으로 단순 초기화하는 것보다 느릴 수 있다.
string s2 {"Voltaire"};
Initializer 없이 변수를 선언하는 가장 일반적인 이유는 변수에 원하는 값을 제공하는 명령문이 필요하기 때문이다. 입력 변수는 이에 대한 몇 가지 합리적인 예 중에 하나다.
void input()
{
int buf[max];
int count = 0;
for (int i; cin>>i;) {
if (i<0) error("unexpected negative value");
if (count==max) error("buffer overflow");
buf[count++] = i;
}
// ...
}
error()가 반환되지 않는다고 가정하면 이 코드로 인해 버퍼 overflow가 발생할 수 있다. 종종 push_back()이 이러한 예에 대해 더 나은 솔루션을 제공한다.
728x90
반응형
'Program Language > C & C++' 카테고리의 다른 글
[C++] 계산기 만들기 (1) parser (4) | 2022.01.05 |
---|---|
[C++] range-for 문 (0) | 2022.01.05 |
[C++] Enumerations (0) | 2022.01.04 |
[C++] Unions (0) | 2022.01.04 |
[C++] 구조체의 필드(field) (0) | 2022.01.04 |