2

関数プロトタイプと型定義が与えられた場合:

int my_function(unsigned short x);
typedef unsigned short blatherskite;

次の状況は、標準で定義されていますか?

int main(int argc, char** argv) {
  int result;
  blatherskite b;

  b=3;
  result = my_function(b);
}

関数プロトタイプを介して予想どおりに型強制を取得しますか?

4

2 に答える 2

9

あなたの質問が本当に引数とパラメータの型が一致するかどうかに関するものであれば、答えはイエスです。typedef新しい型を導入するのではなく、既存の型のエイリアスを作成するだけです。変数はtypedef-name を使用して宣言されていますが、パラメーターと同様にbtypeを持っています。unsigned intbblatherskite

あなたの例は、それを示すのにはあまり適していません。すべての整数型は C++ で相互に変換可能であるため、(範囲の問題を無視して)blatherskite別の型 (新しい型) が指定されていても、コードは動作を定義します。しかし、そうではありません。したがって、これも完全に有効です

void foo(unsigned int* p);
...
blatherskite *pb = 0;
foo(pb); // <- still valid
于 2010-05-25T18:41:20.777 に答える
3

型強制は必要ありません。typedef は同じ型の単なるエイリアスであるため、 を受け取るunsigned short関数に を渡していますunsigned short

于 2010-05-25T18:42:58.027 に答える