C/C++の基礎

関数と引数の渡し方

引数は既定でcopyされ、元のobjectを変更するには明示的なアクセスが必要です。

関数と引数の渡し方とは?

引数は既定でcopyされ、元のobjectを変更するには明示的なアクセスが必要です。

値渡し、pointer、referenceを比較します。

重要なポイント

  • compiler warningを有効にしてすべて修正します。
  • 各値の型とlifetimeを把握します。
  • 入力と配列の境界を検証します。

CとC++のコード例

C
実行 →
main.c
#include <stdio.h>

void swap_ints(int *left, int *right) {
    int temporary = *left;
    *left = *right;
    *right = temporary;
}

int main(void) {
    int a = 4, b = 9;
    swap_ints(&a, &b);
    printf("%d %d\n", a, b);
    return 0;
}
期待される出力
9 4
C++
実行 →
main.cpp
#include <iostream>

void swap_ints(int& left, int& right) {
    int temporary = left;
    left = right;
    right = temporary;
}

int main() {
    int a = 4, b = 9;
    swap_ints(a, b);
    std::cout << a << ' ' << b << '\n';
}
期待される出力
9 4

CとC++の比較

Cはaddressを渡してdereferenceします。C++ referenceはalias構文を提供し、constは読み取り専用を示します。

C

Cは小さな手続き型APIと表現の詳細を明示します。

C++

C++は低レベルモデルを保ちつつ安全な型を追加します。

練習課題

両方を実行して変更し、言語ごとの保証を確認します。

  • 不正入力と境界値を追加します。
  • -Wall -Wextra -Wpedanticでコンパイルします。
  • 宣言と実装を分割します。