수색…
비고
다른 종류의 루프에 대한 루프 주제 를 확인하십시오.
케이스
switch 문의 사례 레이블을 소개합니다. 피연산자는 상수 표현식이어야하고 유형의 스위치 조건과 일치해야합니다. switch 문이 실행되면 조건과 동일한 피연산자가있는 case 레이블로 점프합니다 (있는 경우).
char c = getchar();
bool confirmed;
switch (c) {
case 'y':
confirmed = true;
break;
case 'n':
confirmed = false;
break;
default:
std::cout << "invalid response!\n";
abort();
}
스위치
C ++ 표준에 따르면,
switch
문을 사용하면 조건 값에 따라 여러 명령문 중 하나로 제어가 전송됩니다.
키워드 switch
뒤에는 괄호로 묶인 조건과 블록 ( case
레이블 및 선택적 default
레이블이 포함될 수 있음)이옵니다. switch 문이 실행되면 컨트롤은 조건의 값과 일치하는 값 (있는 case
) 또는 default
레이블 (있는 경우)으로 전달됩니다.
조건은 정수 또는 열거 형을 갖는 표현식 또는 선언이거나 정수 또는 열거 형으로의 변환 함수를 갖는 클래스 유형이어야합니다.
char c = getchar();
bool confirmed;
switch (c) {
case 'y':
confirmed = true;
break;
case 'n':
confirmed = false;
break;
default:
std::cout << "invalid response!\n";
abort();
}
잡기
catch
키워드는 예외 처리기, 즉 호환 가능한 유형의 예외가 발생하면 제어가 전송 될 블록을 도입합니다. catch
키워드 다음에 괄호로 묶인 예외 선언이옵니다 .이 선언 은 형식에서 함수 매개 변수 선언과 유사합니다. 매개 변수 이름은 생략 될 수 있으며 줄임표 ...
는 허용되며 모든 유형과 일치합니다. 예외 처리기는 해당 선언이 예외 유형과 호환 될 경우에만 예외를 처리합니다. 자세한 내용은 예외 catch를 참조하십시오.
try {
std::vector<int> v(N);
// do something
} catch (const std::bad_alloc&) {
std::cout << "failed to allocate memory for vector!" << std::endl;
} catch (const std::runtime_error& e) {
std::cout << "runtime error: " << e.what() << std::endl;
} catch (...) {
std::cout << "unexpected exception!" << std::endl;
throw;
}
태만
switch 문에서 조건의 값이 사례 레이블의 값과 같지 않으면 점프 할 레이블을 도입합니다.
char c = getchar();
bool confirmed;
switch (c) {
case 'y':
confirmed = true;
break;
case 'n':
confirmed = false;
break;
default:
std::cout << "invalid response!\n";
abort();
}
기본 생성자, 복사 생성자, 생성자 이동, 소멸자, 복사 할당 연산자 또는 할당 연산자를 기본 동작으로 이동합니다.
class Base {
// ...
// we want to be able to delete derived classes through Base*,
// but have the usual behaviour for Base's destructor.
virtual ~Base() = default;
};
만약
if 문을 소개합니다. if
키워드는 표현식이나 선언이 될 수있는 괄호로 묶인 조건을 따라야합니다. 조건이 true이면 조건 다음의 하위 구문이 실행됩니다.
int x;
std::cout << "Please enter a positive number." << std::endl;
std::cin >> x;
if (x <= 0) {
std::cout << "You didn't enter a positive number!" << std::endl;
abort();
}
그밖에
if 문 첫 번째 하위에 else
키워드가 올 수 else
. 조건이 false 일 때 (즉, 첫 번째 하위 구문이 실행되지 않을 때) else
키워드 뒤에있는 하위 구문이 실행됩니다.
int x;
std::cin >> x;
if (x%2 == 0) {
std::cout << "The number is even\n";
} else {
std::cout << "The number is odd\n";
}
고토
현재 함수에 있어야하는 레이블이있는 명령문으로 건너 뜁니다.
bool f(int arg) {
bool result = false;
hWidget widget = get_widget(arg);
if (!g()) {
// we can't continue, but must do cleanup still
goto end;
}
// ...
result = true;
end:
release_widget(widget);
return result;
}
반환
함수에서 호출자로 컨트롤을 반환합니다.
return
에 피연산자가 있으면 피연산자가 함수의 반환 유형으로 변환되고 변환 된 값이 호출자에게 반환됩니다.
int f() {
return 42;
}
int x = f(); // x is 42
int g() {
return 3.14;
}
int y = g(); // y is 3
return
에 피연산자가 없으면 함수에 void
반환 유형이 있어야합니다. 특별한 경우로, void
-returning 함수는 표현식이 void
경우 표현식을 반환 할 수 있습니다.
void f(int x) {
if (x < 0) return;
std::cout << sqrt(x);
}
int g() { return 42; }
void h() {
return f(); // calls f, then returns
return g(); // ill-formed
}
main
반환시 std::exit
는 암시 적으로 반환 값과 함께 호출되므로 값이 실행 환경으로 반환됩니다. (그러나 main
에서 돌아 오는 자동 지역 변수는 파괴되지만 std::exit
직접 호출하지 않습니다.)
int main(int argc, char** argv) {
if (argc < 2) {
std::cout << "Missing argument\n";
return EXIT_FAILURE; // equivalent to: exit(EXIT_FAILURE);
}
}
던지다
피연산자가있는 표현식에서
throw
가 발생하면 피연산자의 복사본 인 예외 가 발생 합니다.void print_asterisks(int count) { if (count < 0) { throw std::invalid_argument("count cannot be negative!"); } while (count--) { putchar('*'); } }
피연산자가없는 표현식에서
throw
가 발생 하면 현재 예외 를 다시 throw합니다 . 현재 예외가 없으면std::terminate
가 호출됩니다.try { // something risky } catch (const std::bad_alloc&) { std::cerr << "out of memory" << std::endl; } catch (...) { std::cerr << "unexpected exception" << std::endl; // hope the caller knows how to handle this exception throw; }
함수 선언자에서
throw
가 발생하면 함수가 전파 할 수있는 예외 유형을 나열하는 동적 예외 사양이 도입됩니다.// this function might propagate a std::runtime_error, // but not, say, a std::logic_error void risky() throw(std::runtime_error); // this function can't propagate any exceptions void safe() throw();
동적 예외 사양은 C ++ 11에서 사용되지 않습니다.
위에 나열된 throw
의 처음 두 가지 용도는 명령문이 아닌 표현식을 구성합니다. (throw 표현식의 타입은 void
입니다.) 이렇게하면 표현식 안에 다음과 같이 중첩시킬 수 있습니다 :
unsigned int predecessor(unsigned int x) {
return (x > 0) ? (x - 1) : (throw std::invalid_argument("0 has no predecessor"));
}
시험
try
키워드 다음에는 블록이 있거나 생성자 이니셜 라이저 목록과 블록이 있습니다 ( 여기 참조). try 블록 뒤에는 하나 이상의 catch 블록이옵니다 . 예외 가 try 블록 밖으로 전파되면 try 블록 뒤의 해당 catch 블록 각각은 유형이 일치하는 경우 예외를 처리 할 수있는 기회를 갖습니다.
std::vector<int> v(N); // if an exception is thrown here,
// it will not be caught by the following catch block
try {
std::vector<int> v(N); // if an exception is thrown here,
// it will be caught by the following catch block
// do something with v
} catch (const std::bad_alloc&) {
// handle bad_alloc exceptions from the try block
}
조건부 구조 : if, if..else
if 및 else :
주어진 표현식이 true 또는 false를 반환하는지 여부를 확인하는 데 사용되며 다음과 같이 작동합니다.
if (condition) statement
조건은 진리 / 거짓에 대해 검사 될 무언가를 반환하는 유효한 C ++ 표현식 일 수 있습니다. 예를 들면 다음과 같습니다.
if (true) { /* code here */ } // evaluate that true is true and execute the code in the brackets
if (false) { /* code here */ } // always skip the code since false is always false
조건은 아무거나, 함수, 변수 또는 비교 일 수 있습니다.
if(istrue()) { } // evaluate the function, if it returns true, the if will execute the code
if(isTrue(var)) { } //evalute the return of the function after passing the argument var
if(a == b) { } // this will evaluate the return of the experssion (a==b) which will be true if equal and false if unequal
if(a) { } //if a is a boolean type, it will evaluate for its value, if it's an integer, any non zero value will be true,
여러 표현식을 확인하려면 두 가지 방법으로 수행 할 수 있습니다.
이항 연산자 사용 :
if (a && b) { } // will be true only if both a and b are true (binary operators are outside the scope here
if (a || b ) { } //true if a or b is true
if / ifelse / else 사용 :
if 또는 else 중 간단한 전환
if (a== "test") {
//will execute if a is a string "test"
} else {
// only if the first failed, will execute
}
여러 가지 선택 사항 :
if (a=='a') {
// if a is a char valued 'a'
} else if (a=='b') {
// if a is a char valued 'b'
} else if (a=='c') {
// if a is a char valued 'c'
} else {
//if a is none of the above
}
그러나 코드가 동일한 변수의 값을 검사하는 경우 대신 ' switch '를 사용해야한다는 것에주의해야합니다
점프 명령문 : 중단, 계속, 이동, 종료.
휴식 지시 :
break를 사용하면 끝의 조건이 충족되지 않아도 루프를 종료 할 수 있습니다. 그것은 무한 루프를 끝내거나 자연스럽게 끝나기 전에 강제로 끝내는 데 사용할 수 있습니다
구문은 다음과 같습니다.
break;
예 : switch
케이스에서 break
를 사용합니다. 즉 case i 스위치가 만족되면 해당 조건의 코드 블록이 실행됩니다.
switch(conditon){
case 1: block1;
case 2: block2;
case 3: block3;
default: blockdefault;
}
이 경우 케이스 1이 충족되면 블록 1이 실행되고, 실제로 원하는 것은 block1 만 처리되지만 대신 한 번 block1이 나머지 블록으로 처리되면 case1 만 포화 된 경우에도 block2, block3 및 blockdefault가 처리됩니다 . 이것을 피하려면 다음과 같이 각 블록의 끝에 break를 사용하십시오.
switch(condition){
case 1: block1;
break;
case 2: block2;
break;
case 3: block3;
break;
default: blockdefault;
break;
}
하나의 블록 만 처리되고 제어는 스위치 루프 밖으로 이동합니다.
break는 if
, while
, for
등과 같은 다른 조건부 및 비 조건부 루프에서도 사용할 수 있습니다.
예:
if(condition1){
....
if(condition2){
.......
break;
}
...
}
계속 명령 :
continue 명령은 명령 블록의 끝 부분에 도달 한 것처럼 프로그램이 현재 반복에서 나머지 루프를 건너 뛰게하여 다음 반복으로 건너 뜁니다.
구문은 다음과 같습니다.
continue;
예를 들어 다음을 고려하십시오.
for(int i=0;i<10;i++){
if(i%2==0)
continue;
cout<<"\n @"<<i;
}
출력을 생성합니다.
@1
@3
@5
@7
@9
이 코드는 i%2==0
조건이 만족 될 때마다 continue
처리됩니다. 이로 인해 컴파일러는 나머지 코드 (인쇄 @ 및 i)를 건너 뛰고 루프의 증가 / 감소 문이 실행됩니다.
고토 명령어 :
프로그램의 다른 지점으로 절대 점프 할 수 있습니다. 이 기능을 실행하면 중첩 제한 유형이 무시되므로이 기능을 신중하게 사용해야합니다. 대상 점은 goto 명령의 인수로 사용되는 레이블로 식별됩니다. 레이블은 콜론 (:) 다음에 유효한 식별자로 구성됩니다.
구문은 다음과 같습니다.
goto label;
..
.
label: statement;
참고 : goto 문을 사용하면 프로그램의 제어 흐름을 추적하기가 어려워 프로그램을 이해하기 어렵고 수정할 수 없기 때문에 사용하지 않는 것이 좋습니다.
예 :
int num = 1;
STEP:
do{
if( num%2==0 )
{
num = num + 1;
goto STEP;
}
cout << "value of num : " << num << endl;
num = num + 1;
}while( num < 10 );
출력 :
value of num : 1
value of num : 3
value of num : 5
value of num : 7
value of num : 9
조건 num%2==0
이 충족 될 때마다 goto는 실행 제어를 do-while
루프의 시작 부분으로 보냅니다.
exit 함수 :
exit
는 cstdlib
정의 된 함수입니다. exit
목적은 실행중인 프로그램을 특정 종료 코드로 종료하는 것입니다. 프로토 타입은 다음과 같습니다.
void exit (int exit code);
cstdlib
표준 출력 코드 정의 EXIT_SUCCESS
와 EXIT_FAILURE
.