タグ付けされた質問 「c++」

C ++は汎用プログラミング言語です。もともとCの拡張として設計され、構文は似ていますが、現在は完全に異なる言語になっています。このタグは、C ++コンパイラでコンパイルされる(される)コードに関する質問に使用します。特定の標準リビジョン[C ++ 11]、[C ++ 14]、[C ++ 17]または[C ++ 20]などに関連する質問には、バージョン固有のタグを使用します。

1
std :: launderの目的は何ですか?
P0137は、関数テンプレートstd::launderを導入し、 共用体、存続時間、およびポインターに関するセクションで標準に多くの多くの変更を加えます。 このペーパーが解決している問題は何ですか?私が認識しなければならない言語の変更は何ですか?そして、私たちは何をしているのlaunderですか?

19
同様のconstメンバー関数と非constメンバー関数の間のコードの重複を削除するにはどうすればよいですか?
class X内部メンバーにアクセスを戻したい場所が次のようになっているとします。 class Z { // details }; class X { std::vector<Z> vecZ; public: Z& Z(size_t index) { // massive amounts of code for validating index Z& ret = vecZ[index]; // even more code for determining that the Z instance // at index is *exactly* the right sort of Z …

21
C ++関数から複数の値を返す
C ++関数から複数の値を返す推奨方法はありますか?たとえば、2つの整数を除算し、商と剰余の両方を返す関数を想像してみてください。私がよく目にする1つの方法は、参照パラメーターを使用することです。 void divide(int dividend, int divisor, int& quotient, int& remainder); バリエーションは、1つの値を返し、もう1つを参照パラメーターを介して渡すことです。 int divide(int dividend, int divisor, int& remainder); 別の方法は、すべての結果を含む構造体を宣言し、それを返すことです。 struct divide_result { int quotient; int remainder; }; divide_result divide(int dividend, int divisor); これらの方法のいずれかが一般的に推奨されますか、それとも他の提案がありますか? 編集:実際のコードでは、結果が3つ以上ある場合があります。彼らはまた、異なるタイプであるかもしれません。
242 c++ 

6
名前のない名前空間が使用される理由とその利点は何ですか?
新しいC ++ソフトウェアプロジェクトに参加したばかりで、デザインを理解しようとしています。プロジェクトは、名前のない名前空間を頻繁に使用します。たとえば、クラス定義ファイルで次のようなことが発生する可能性があります。 // newusertype.cc namespace { const int SIZE_OF_ARRAY_X; const int SIZE_OF_ARRAY_Y; bool getState(userType*,otherUserType*); } newusertype::newusertype(...) {... 名前のない名前空間を使用する可能性がある設計上の考慮事項は何ですか?長所と短所は何ですか?
242 c++  oop  namespaces 

21
C ++ std :: stringが特定の文字列で始まるかどうかを確認し、部分文字列をintに変換するにはどうすればよいですか?
C ++で次の(Python疑似コード)を実装するにはどうすればよいですか? if argv[1].startswith('--foo='): foo_value = int(argv[1][len('--foo='):]) (たとえば、argv[1]ある--foo=98、次にfoo_valueです98。) 更新:単純な小さなコマンドラインツールに非常に小さな変更を加えることを検討しているだけなので、Boostを調べるのをためらっています(マイナーにBoostをリンクして使用する方法を学ぶ必要はありません)変化する)。

4
(-2147483648> 0)C ++ではtrueを返しますか?
-2147483648は32ビットの整数型の最小の整数ですが、if(...)文中でオーバーフローするようです: if (-2147483648 > 0) std::cout << "true"; else std::cout << "false"; これはtrue私のテストで印刷されます。ただし、-2147483648を整数にキャストすると、結果は異なります。 if (int(-2147483648) > 0) std::cout << "true"; else std::cout << "false"; これは印刷されますfalse。 よくわかりません。誰でもこれについて説明できますか? 2012年2月5日更新: コメントありがとうございます。私のコンパイラでは、intのサイズは4バイトです。いくつかの簡単なテストにVCを使用しています。質問の説明を変更しました。 すなわち、この記事では非常に良いreplysがたくさんだ、AndreyTは非常に詳細な入力にどのようにコンパイラの意志行動に説明し、どのようにこの最小の整数が実装されましたを与えました。一方、qPCR4virは、いくつかの関連する「好奇心」と、整数の表現方法を提供しました。とても印象的です!



6
カスタムイテレータとconst_iteratorsを正しく実装するにはどうすればよいですか?
iteratorおよびconst_iteratorクラスを記述したいカスタムコンテナクラスがあります。 私はこれまでこれをやったことがなく、適切なハウツーを見つけることができませんでした。イテレータの作成に関するガイドラインは何ですか。また、何に注意する必要がありますか? また、コードの重複を避けたいと思います(それを感じてconst_iterator、iterator多くのことを共有します。一方を他方にサブクラス化する必要がありますか?)。 脚注:Boostにはこれを緩和する機能があると確信していますが、多くの愚かな理由のため、ここでは使用できません。

12
C ++でバイナリファイルを非常に高速に書き込む
SSD(ソリッドステートドライブ)に大量のデータを書き込もうとしています。そして膨大な量とは80GBを意味します。 私は解決策を求めてウェブを閲覧しましたが、私が思いついたのはこれでした: #include <fstream> const unsigned long long size = 64ULL*1024ULL*1024ULL; unsigned long long a[size]; int main() { std::fstream myfile; myfile = std::fstream("file.binary", std::ios::out | std::ios::binary); //Here would be some error handling for(int i = 0; i < 32; ++i){ //Some calculations to fill a[] myfile.write((char*)&a,size*sizeof(unsigned long long)); } myfile.close(); …

10
C ++ベクトルの要素を合計する方法は?
のすべての要素の合計を見つける良い方法は何std::vectorですか? std::vector<int> vectorいくつかの要素を含むベクトルがあるとします。次に、すべての要素の合計を求めます。同じための異なる方法は何ですか?
240 c++  stl  vector 



12
繰り返し処理中にstd :: listから要素を削除できますか?
次のようなコードがあります。 for (std::list<item*>::iterator i=items.begin();i!=items.end();i++) { bool isActive = (*i)->update(); //if (!isActive) // items.remove(*i); //else other_code_involving(*i); } items.remove_if(CheckItemNotActive); 再びリストをたどらないようにするために、更新後すぐに非アクティブなアイテムを削除したいと思います。しかし、コメント化された行を追加すると、i++「List iterator not incrementable」にアクセスしたときにエラーが発生します。forステートメントで増加しない代替案をいくつか試しましたが、何も動作しませんでした。 std :: listを歩いているときにアイテムを削除する最良の方法は何ですか?
239 c++  list  std 


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.