問題タブ [c++-faq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ インライン関数がヘッダーにあるのはなぜですか?
注: これは、インライン関数の使用方法や機能に関する問題ではなく、なぜこのように実行されるのかという問題です。
クラスメンバー関数の宣言では、関数を as として定義する必要はありませんinline
。関数の実際の実装のみです。たとえば、ヘッダー ファイルでは次のようになります。
では、なぜクラス関数のインライン実装をヘッダー ファイルに含める必要があるのでしょうか。インライン関数を.cpp
ファイルに配置できないのはなぜですか? インライン定義を.cpp
ファイルに入れようとすると、次の行に沿ってエラーが発生します。
c++ - IOStream のパフォーマンスを向上させるにはどうすればよいですか?
C を学んだほとんどの C++ ユーザーは、C++ でコーディングしている場合でも、関数のprintf
/scanf
ファミリを使用することを好みます。
インターフェイスの方がはるかに優れていることは認めますが (特に POSIX に似た形式とローカリゼーション)、圧倒的な懸念事項はパフォーマンスであるようです。
この質問を見てみましょう:
最良の答えは使用することfscanf
であり、C++ifstream
は一貫して 2 ~ 3 倍遅いようです。
IOStreams のパフォーマンスを改善するための「ヒント」のリポジトリをコンパイルできれば、何が機能し、何が機能しないかを考えることができれば素晴らしいと思いました。
考慮すべき点
- バッファリング (
rdbuf()->pubsetbuf(buffer, size)
) - 同期 (
std::ios_base::sync_with_stdio
) - ロケール処理 (縮小されたロケールを使用するか、それとも完全に削除できますか?)
もちろん、他のアプローチも大歓迎です。
注: Dietmar Kuhl による「新しい」実装が言及されましたが、それに関する多くの詳細を見つけることができませんでした。以前の参照はリンク切れのようです。
c++ - C ++で数値を文字列に、またはその逆に変換する方法
この質問は毎週聞かれるので、このFAQは多くのユーザーに役立つかもしれません。
C++ で整数を文字列に変換する方法
C++ で文字列を整数に変換する方法
C++ で浮動小数点数を文字列に変換する方法
C++ で文字列を浮動小数点数に変換する方法
c++ - C ++ 11でのT&&(ダブルアンパサンド)とはどういう意味ですか?
私はC++11の新機能のいくつかを調べてきましたが、気付いたのは、のような変数を宣言する際の2つのアンパサンドですT&& var
。
まず、この獣は何と呼ばれていますか?Googleがこのような句読点の検索を許可してくれることを願っています。
正確にはどういう意味ですか?
一見、ダブルリファレンス(CスタイルのダブルポインタのようにT** var
)のように見えますが、そのユースケースを考えるのに苦労しています。
c++ - ループ条件内のiostream::eof(つまり、 `while(!stream.eof())`)が間違っていると見なされるのはなぜですか?
この回答iostream::eof
で、ループ条件での使用は「ほぼ間違いなく間違っている」というコメントを見つけました。私は通常、次のようなものを使用しますwhile(cin>>n)
-暗黙的にEOFをチェックすると思います。
while (!cin.eof())
明示的に間違った ものを使用してeofをチェックするのはなぜですか?
scanf("...",...)!=EOF
C(私はよく問題なく使用します)で使用するのとどう違うのですか?
c++ - std::string を C 関数の char* に変換するときの注意点は?
C++を変換する方法std::string
やC 関数に渡す方法について質問する多くの投稿を読みましたが、これを行うことに関してかなりの注意事項があるようです。文字列が連続していることや、他の多くのことに注意する必要があります。要点は、注意すべきすべての点とその理由を私が本当に理解したことがないということです。const std::string&
char*
C関数に渡すために必要なa から astd::string
への変換を行うことについて、誰かが警告と失敗を要約できるかどうか疑問に思いましたか?char*
これstd::string
は、 がconst
参照であり、単なる非 const 参照である場合、および C 関数が を変更するchar*
場合と変更しない場合です。
c++ - C++でのポリモーフィズム
私の知る限り:
C ++は、3つの異なるタイプのポリモーフィズムを提供します。
- 仮想関数
- 関数名のオーバーロード
- 演算子のオーバーロード
上記の3種類のポリモーフィズムに加えて、他の種類のポリモーフィズムが存在します。
- ランタイム
- コンパイル時
- アドホック多相
- パラメトリック多型
ランタイムポリモーフィズムは仮想関数によって実現でき 、静的ポリモーフィズムはテンプレート関数によって実現できることを私は知っています
しかし、他の2つについては
- アドホック多相
- ウェブサイトが言うパラメトリック多型、
アドホック多相:
使用できる実際のタイプの範囲が有限であり、使用前に組み合わせを個別に指定する必要がある場合、これはアドホック多相と呼ばれます。
パラメトリック多型:
すべてのコードが特定のタイプについて言及せずに記述されているため、任意の数の新しいタイプで透過的に使用できる場合、それはパラメトリックポリモーフィズムと呼ばれます。
私はそれらをほとんど理解できません:(
可能であれば、例を挙げて両方を説明できますか?この質問への回答が、大学からの多くの新しいパスアウトに役立つことを願っています。
c++ - C ++ 11ではセーフブールイディオムは廃止されていますか?
@Rのこの答え。Martinho Fernandesは、単純な
回答の標準的な引用によると§4 [conv] p3
:
式 e は、何らかの発明された一時変数(§8.5)に対して
T
、宣言が適切な形式である場合にのみ、暗黙的に型に変換できます。特定の言語構造では、式をブール値に変換する必要があります。そのようなコンテキストに現れる式は、何らかの発明された一時変数 t (§8.5) に対して、宣言が整形式である場合に限り、に文脈的に変換され、整形式であると言われます (§8.5)。T t=e;
t
e
bool
bool t(e);
強調表示された部分は、@R として "暗黙の明示的なキャスト" (標準では "コンテキスト変換" と呼ばれます) を明確に示しています。マルティニョはそう言った。
「暗黙の明示的なキャスト」を必要とする「特定の言語構造」は次のようです。
if
,while
,for
(§6.4 [stmt.select] p4
)- 二項論理演算子
&&
and||
(§5.14 [expr.log.and/or] p1
両方の場合) - 論理否定演算子
!
(§5.3.1 [expr.unary.op] p9
) - 条件演算子
?:
(§5.14 [expr.cond] p1
) static_assert
(§7 [dcl.dcl] p4
)noexcept
(§15.4 [except.spec] p2
)
タイトルの仮定は正しいですか?潜在的な欠点を見逃さなかったことを願っています。
c++ - コンパイル/リンク プロセスはどのように機能しますか?
コンパイルとリンクのプロセスはどのように機能しますか?
(注: これはStack Overflow の C++ FAQへのエントリであることを意図しています。FAQ をこのフォームで提供するという考えを批判したい場合は、すべての始まりとなった meta への投稿がそれを行う場所になります。回答への回答その質問は、FAQ のアイデアが最初に始まったC++ チャットルームで監視されているため、アイデアを思いついた人にあなたの回答が読まれる可能性が非常に高くなります。)