2

これをグーグルで調べてみましたが、場所によって異なる答えが得られます。次のいずれかを使用する必要がある場合を知りたいです。

#include <stdio>
#include <cstdio>
#include <iostream>

私の場合、これらを同じ意味で使用すると、すべての C++ プログラムが機能するように見えるため、違いを理解できません。そうは言っても、iostreamはcinやcoutなどを定義することで入出力のストリームをサポートしているようですが、間違っているかもしれません。C++標準を参照して、これらの使用法についての回答/信頼できる引用をいただければ幸いです。どちらか一方を使用することに関連するパフォーマンス上の利点があるかどうかは疑問です。

4

3 に答える 3

1

stdioは C の標準 IO 用です.h。末尾に a が必要です。C++ では、すべての C ヘッダーがヘッダーにカプセル化されていますcxxxxxx( なし.h)。は<stdio.h>と同じ<cstudio>です。これらは、単純な IO 用のprintfや などの機能を提供します。scanf

iostream一方、C++ の IO ライブラリであり、おっしゃったようcinに や などのストリームを提供しcoutます。

アプリケーションに応じて、ほとんどの場合、それらを交互に使用できます。構文は明らかに異なります。

C 関数を使用すると、テキストの書式設定が簡単になります。例えば:

printf("item %04d has a value of %+.6e\n", index, value);

よりも書きやすいです (<iomanip>に加えて必要です<iostream>):

std::cout << "item " << std::setw(4) << std::setfill('0') << index
          << "has a value of " << std::setprecision(6) << value << "\n";

ただし、最初のものを使用するときは、より注意する必要があります。たとえば、次の行ではコンパイル エラーは発生しませんが (ただし、前述のとおり、コンパイル時に警告が表示される場合があります)、実行時の問題が発生します。

printf("I wonder what will happen? %d\n");

ほとんどのストリームの「魔法」はコンパイル時に発生し、同様の結果が得られるはずなので、パフォーマンスに大きな違いはないと思います。100%確実ではないので、間違っていたらごめんなさい。

于 2014-09-03T14:09:23.280 に答える
1

非標準ヘッダー

  • <stdio>私が知っているどの標準にも定義されていません。

C の標準化されたヘッダー

  • <stdio.h>printf()や などの関数を含む c ヘッダーscanf()です。

C++ の標準化されたヘッダー

  • <stdio.h>C++ 標準に含まれていますが、推奨されていません。
  • <cstdio>printf()や などを含む C++ ヘッダーですscanf()
  • <iostream>std::cout、 、std::cerrなどを含む C++ ヘッダーですstd::cin
于 2014-09-03T14:03:16.610 に答える