Program Language/C & C++

[C++] 선언 명령문

야곰야곰+책벌레 2022. 1. 5. 13:39
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