수색…


비고

다른 종류의 루프에 대한 루프 주제 를 확인하십시오.

케이스

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();
}
C ++ 11

기본 생성자, 복사 생성자, 생성자 이동, 소멸자, 복사 할당 연산자 또는 할당 연산자를 기본 동작으로 이동합니다.

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);
    }
}

던지다

  1. 피연산자가있는 표현식에서 throw 가 발생하면 피연산자의 복사본 인 예외발생 합니다.

    void print_asterisks(int count) {
        if (count < 0) {
            throw std::invalid_argument("count cannot be negative!");
        }
        while (count--) { putchar('*'); }
    }
    
  2. 피연산자가없는 표현식에서 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;
    }
    
  3. 함수 선언자에서 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)를 건너 뛰고 루프의 증가 / 감소 문이 실행됩니다.

in for 루프

고토 명령어 :

프로그램의 다른 지점으로 절대 점프 할 수 있습니다. 이 기능을 실행하면 중첩 제한 유형이 무시되므로이 기능을 신중하게 사용해야합니다. 대상 점은 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 함수 :

exitcstdlib 정의 된 함수입니다. exit 목적은 실행중인 프로그램을 특정 종료 코드로 종료하는 것입니다. 프로토 타입은 다음과 같습니다.

void exit (int exit code);

cstdlib 표준 출력 코드 정의 EXIT_SUCCESSEXIT_FAILURE .



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow