C++ 入門書の注意事項 - ステートメントの使用

①空文

        最も単純なステートメントは、単一のセミコロンのみで構成される空のステートメントです。

②switch文

        case キーワードとそれに対応する値は case ラベルと呼ばれ、case ラベルは整数定数式でなければなりません。

char ch = getVal();
int iVal = 42;
switch(ch){
    case 3.14: // 错误,case标签不是一个整数
    case ival: // 错误,case标签不是一个常量
    ……
}

③記載の範囲

        新しい C++11 標準では、ステートメントの範囲が導入されています。これは、コンテナーまたはその他のシーケンスのすべての要素をトラバースできます。

       The expression must be a sequence, which can be an initialization list within a curly brackets, an array, or objects of types of types such as vector and string. これらのオブジェクトは、反復子を返すことができる begin メンバーと end メンバーを持つことによって特徴付けられます。

        宣言は変数を定義し, シーケンスの各要素は変数の型に変換できなければなりません. 一般に, 変数の宣言には自動型指定子が使用されます. シーケンスの要素を記述する必要がある場合, ループ変数は参照型として宣言する必要があります。

for (declaration : expression)
    statement

std::vector<int> v = {0, 1, 2, 3};
for (auto &r : v)
    r *= 2; // 将 v 中所有元素翻倍
// 范围 for 语句与以下传统 for 语句等价
for(auto beg = v.begin(), end = v.end(); beg != end; ++beg){
    auto &r = *beg;
    r *=2;
}
// 因此不能通过范围 for 语句增加 vector 对象的元素,因为范围 for 语句预存了 end() 的值;

④break文とcontinue文

        break ステートメントは、それに最も近い while、do while、for、および switch ステートメントを終了し、これらのステートメントの後の最初のステートメントから実行を継続します。

        continue ステートメントは、最も近いループで現在の反復を終了し、すぐに次の反復を開始します。これは、for、while、do while、またはそのようなループにネストされたステートメントまたはブロック内にのみ表示できます。

        break ステートメントのスコープは、最も近いループまたは switch に制限されます。ネストされたループに表示される continue ステートメントは、最も近いループでのみ機能します。break ステートメントとは異なり、switch ステートメントが反復ステートメント内にネストされている場合にのみ、 switch 内の continue ステートメント。

⑤goto文

        goto ステートメントの機能は、 goto ステートメントから同じ関数内の別のステートメントに無条件にジャンプすることです . プログラムで goto ステートメントを使用することは、プログラムの理解と変更を難しくする可能性があるため、一般的にはお勧めしません;

goto label;

// label 是用于标识一条语句的标示符,其定义的带标签语句如下:
label : xxxxx;    // xxxx为具体的语句

        goto ステートメントは初期化変数定義のあるステートメントをスキップできません。つまり、次のコードはエラーになります。これは、goto ステートメントが int a = 30; の初期化定義を持つステートメントをスキップするためです。

// 错误代码如下:
#include "iostream"

int main(int argc, char* argv[]){
    goto label;
    int a = 30;
    std::cout << "a: " << a << std::endl;
    label :
        int b = 50;
        std::cout << "b: " << b << std::endl;

    return 0;
}

// 正确代码如下:
#include "iostream"

int main(int argc, char* argv[]){
    int a = 30;
    goto label;
    std::cout << "a: " << a << std::endl;
    label :
        int b = 50;
        std::cout << "b: " << b << std::endl;

    return 0;
}

⑥例外処理の仕組み

        例外処理メカニズムは、プログラム内の例外検出と例外処理の連携をサポートします; C++ 言語では、例外処理には、throw 式、try ステートメント ブロック、および例外クラスが含まれます。

        スロー式: 例外検出部分は、スロー式を使用して、遭遇した未処理の問題を表現します。一般に、スローは例外を発生させます。

        Try ステートメント ブロック: 例外処理部分は、try ステートメント ブロックを使用して例外を処理します。これは、キーワード try で始まり、1 つまたは複数の catch 句で終了します。try ステートメント ブロックでスローされた例外は、通常、catch 句によって処理されます。したがって、 catch 句は例外処理コードと呼ばれます。

        例外クラス: throw 式と関連する catch 句の間で例外固有の情報を渡すために使用されます。

        throw 式は、throw キーワードとそれに続く式で構成されます。式の型は、スローされる例外の型です。

        例外をスローすると、現在の関数が終了し、例外を処理できるコードに制御が移ります。

// 当数据的 ISBN 不相同时,抛出一个 runtime_error 类型的异常对象
if(item1.isbn() != item2.isbn()){
    throw runtime_error("DATA must refer to same ISBN");
}

        try ステートメント ブロックの一般的な文法形式は次のとおりです。つまり、try ブロックと 1 つまたは複数の catch 句ブロックで構成されます。catch 句には、キーワード catch、括弧内のオブジェクトの宣言 (と呼ばれる) の 3 つの部分が含まれます。例外ステートメント)、およびピース;

        例外を処理するために catch 句が選択されると、対応するブロックが実行されます。catch が完了すると、プログラムは try ステートメント ブロックの最後の catch 句の後のステートメントにジャンプして実行を継続します。

try{
    program-statements
} catch (exception-declaration){
    handler-statements
} catch (exception-declaration){
    handler-statements
}
// 代码实例
#include <iostream>
#include <stdexcept>

int main(int argc, char* argv[]){
    int color;
    std::cin >> color;
    std::cout << "your input is : " << color << std::endl;
    try{
        if (color > 255){
            // 抛出上溢错误
            throw std::overflow_error("上溢"); 
        } 
        else if(color < 0){
            // 抛出下溢错误
            throw std::underflow_error("下溢");
        }
    }
    // 捕获std::overflow_error的错误
    catch(std::overflow_error err1){ 
        color = 255;
    }
    // 捕获std::underflow_error的错误
    catch(std::underflow_error err2){ 
        color = 0;
    }
    std::cout << "Real valid data: " << color << std::endl;

    return 0;
}

         上記のコードでは、さまざまな検出条件に従ってさまざまな例外がスローされ、対応する catch ステートメントによって処理されます。スローされる例外の種類は、提供されている標準例外を使用することも、例外の種類をカスタマイズすることもできます。上記のコードでは、ヘッダーを使用します。ファイル stdexcept によって提供される 2 つの標準例外クラス: std::overflow_error および std::underflow_error。

        例外がスローされると、例外を処理できる関数が検索され、一致する catch 句が見つからない場合、プログラムは terminate 関数を呼び出してプログラムを終了します。

おすすめ

転載: blog.csdn.net/weixin_43863869/article/details/130394140
おすすめ