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

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

3
C ++でのフレンド宣言-パブリックとプライベートの違い
フレンド関数/クラスをプライベートまたはパブリックとして宣言することには違いがありますか?これについてオンラインで何も見つけることができないようです。 私は以下の違いを意味します: class A { public: friend class B; }; そして class A { private: //or nothing as the default is private friend class B; }; 違いはありますか?
142 c++  private  friend  public 

9
Boost:asioの最良のドキュメント?
boost Webサイトで入手できるドキュメントは...限定されています。 私が読んだことから、一般的なコンセンサスは、boost :: asioライブラリに関する適切なドキュメントを見つけることは単に難しいということです。 これは本当ですか?もしそうなら、なぜですか? ノート: 私はすでに(非ブースト)Asio Webサイトを見つけました-そして、ドキュメントはBoostウェブサイトのものと同じに見えます。 Boost :: asioが新しいことを知っています。言い訳ではなく解決策を探しています。 編集: Boost:asio(Christopher Kohlhoff)の作者によって書かれたTR2の標準ライブラリにネットワークライブラリを追加する提案があります。boost:asioのドキュメントではありませんが、TR2提案のベースとして使用します。著者がこのドキュメントにさらに力を入れたので、リファレンスとしてではなくても、少なくとも概要として、いくらか役立つことがわかりました。
141 c++  boost  boost-asio 

6
独自のイテレーターを作成する
私はC ++を習得しようとしているので、この質問が基本的な知識の欠如を示している場合は許してください。 私が作成したクラスのイテレータを作成する方法を理解するための助けが欲しい。 ポイントのコンテナーを持つクラス 'Shape'があります。Shapeを参照し、Shapeの位置を定義するクラス「Piece」があります。ピースはシェイプを持たず、シェイプを参照するだけです。 ピースがポイントのコンテナのように見えるようにしたいのですが、それは参照するシェイプと同じですが、ピースの位置のオフセットが追加されています。 ピースがコンテナそのものであるかのように、ピースのポイントを反復処理できるようにしたい。私は少し読んでみましたが、私を助けてくれるものは何も見つかりませんでした。私はどんなポインタにもとても感謝しています。
141 c++  iterator 

5
stringstream、string、char *変換の混乱
私の質問は要約することができます。文字列はstringstream.str().c_str()メモリ内のどこから返されますか。なぜそれをaに割り当てることができないのconst char*ですか。 このコード例は私がそれをよりよく説明します #include <string> #include <sstream> #include <iostream> using namespace std; int main() { stringstream ss("this is a string\n"); string str(ss.str()); const char* cstr1 = str.c_str(); const char* cstr2 = ss.str().c_str(); cout << cstr1 // Prints correctly << cstr2; // ERROR, prints out garbage system("PAUSE"); return 0; } stringstream.str().c_str()に割り当てられる可能性のある想定によりconst …

12
便利なC ++構造体の初期化
「ポッド」C ++構造体を初期化する便利な方法を見つけようとしています。ここで、次の構造体について考えてみましょう。 struct FooBar { int foo; float bar; }; // just to make all examples work in C and C++: typedef struct FooBar FooBar; これをC(!)で簡単に初期化したい場合は、次のように書くだけです。 /* A */ FooBar fb = { .foo = 12, .bar = 3.4 }; // illegal C++, legal C 次の表記法は明示的に避けたいことに注意してください。これは、将来構造体で何かを変更すると首を骨折するように作られているように思われるためです。 /* B */ FooBar …

7
実行時に[DllImport]パスを指定するにはどうすればよいですか?
実際、C#プロジェクトにインポートして関数を呼び出すC ++(動作)DLLを取得しました。 DLLへのフルパスを指定すると、次のように機能します。 string str = "C:\\Users\\userName\\AppData\\Local\\myLibFolder\\myDLL.dll"; [DllImport(str, CallingConvention = CallingConvention.Cdecl)] public static extern int DLLFunction(int Number1, int Number2); 問題は、それがインストール可能なプロジェクトになることです。そのため、ユーザーのフォルダーは、実行されるコンピューター/セッションによっては同じではありません(例:pierre、paul、jack、mum、dad、...)。 だから私は私のコードを次のようにもう少し一般的にしたいと思います: /* goes right to the temp folder of the user "C:\\Users\\userName\\AppData\\Local\\temp" then go to parent folder "C:\\Users\\userName\\AppData\\Local" and finally go to the DLL's folder "C:\\Users\\userName\\AppData\\Local\\temp\\myLibFolder" */ string str = …
141 c#  c++  dll  constants  dllimport 

6
C ++ 11で「auto」を使用して推定されるときのラムダのタイプは何ですか?
ラムダの型は関数ポインターであるという認識がありました。以下のテストを行ったところ、間違っていることがわかりました(デモ)。 #define LAMBDA [] (int i) -> long { return 0; } int main () { long (*pFptr)(int) = LAMBDA; // ok auto pAuto = LAMBDA; // ok assert(typeid(pFptr) == typeid(pAuto)); // assertion fails ! } 上記のコードにポイントがありませんか?そうでない場合、キーワードでtypeof推定されるときのラムダ式は何autoですか?
141 c++  lambda  c++11  typeof  auto 


3
std :: functionをconst-referenceで渡す必要がありますか?
私が取る関数があるとしましょうstd::function: void callFunction(std::function<void()> x) { x(); } x代わりにconst-reference を渡す必要がありますか?: void callFunction(const std::function<void()>& x) { x(); } この質問に対する答えは、関数がそれで何をするかによって異なりますか?たとえば、それをstd::functionメンバー変数に格納または初期化するクラスメンバー関数またはコンストラクターである場合。
141 c++  function  reference 

4
cmakeで共有ライブラリを作成する方法は?
自分で作成したMakefileを使用してコンパイルするために使用するライブラリを作成しましたが、今度はcmakeに切り替えます。ツリーは次のようになります(関係のないファイルをすべて削除しました)。 . ├── include │ ├── animation.h │ ├── buffers.h │ ├── ... │ ├── vertex.h │ └── world.h └── src ├── animation.cpp ├── buffers.cpp ├── ... ├── vertex.cpp └── world.cpp だから私がやろうとしていることは、ソースを共有ライブラリにコンパイルし、それをヘッダーファイルと一緒にインストールすることです。 私が見つけたほとんどの例は、いくつかの共有ライブラリを使用して実行可能ファイルをコンパイルしますが、単純な共有ライブラリだけではありません。cmakeを使用する非常に単純なライブラリーを誰かに教えてもらえれば、これも例として使用できるので参考になります。

7
短絡論理演算子は必須ですか?そして評価順は?
ANSI規格では、CまたはC ++のいずれかで、論理演算子を短絡させることを義務付けていますか? あなたのコードは短絡されているこれらの演算に依存すべきではないと言っているK&Rの本を思い​​出して混乱しています。誰かが標準のどこで論理演算が常に短絡されていると言われているのか指摘してもらえますか?私は主にC ++に興味がありますが、Cの回答も素晴らしいでしょう。 私はまた、評価順序が厳密に定義されていないことを読んだことを思い出します(どこで思い出せないか)。したがって、コードは依存しないか、式内の関数が特定の順序で実行されると想定しないでください。呼び出されますが、コンパイラーは最も効率的な順序を自由に選択できます。 標準はこの式の評価順序を示していますか? if( functionA() && functionB() && functionC() ) cout<<"Hello world";


16
C ++静的仮想メンバー?
C ++ではstaticandとなるメンバー関数を持つことは可能virtualですか?どうやら、それを行う簡単な方法はありません(static virtual member();コンパイルエラーです)が、少なくとも同じ効果を達成する方法はありますか? IE: struct Object { struct TypeInformation; static virtual const TypeInformation &GetTypeInformation() const; }; struct SomeObject : public Object { static virtual const TypeInformation &GetTypeInformation() const; }; GetTypeInformation()インスタンス(object->GetTypeInformation())とクラス(SomeObject::GetTypeInformation())の両方で使用することは意味があります。これは、比較に役立ち、テンプレートに不可欠です。 私が考えることができる唯一の方法は、クラスごとに、またはマクロを使用して、関数と定数の2つの関数を記述することです。 他の解決策はありますか?
140 c++  static  virtual 

2
#pragmaはC ++ 11標準の一部でしたか?
従来、C ++での複数のヘッダーのインクルードを回避する標準的で移植可能な方法は、マクロガードスキーム#ifndef - #define - #endifとも呼ばれるプリコンパイラディレクティブスキームを使用することでした(現在のコードスニペットを参照)。 #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif ただし、ほとんどの実装/コンパイラ(下の図を参照)では、と呼ばれるマクロガードスキームと同じ目的で使用できる、より「エレガントな」代替手段があります#pragma once。#pragma onceマクロガードスキームと比較して、コードの削減、名前の衝突の回避、場合によってはコンパイル速度の向上など、いくつかの利点があります。 調査を行ったところ、#pragma onceほとんどすべての既知のコンパイラーでディレクティブがサポートされています#pragma onceが、ディレクティブがC ++ 11標準の一部であるかどうかがわかりません。 質問: 誰か#pragma onceがC ++ 11標準の一部であるかどうかを誰かが明確にできますか? C ++ 11標準の一部ではない場合、それを今後のリリース(C ++ 14以降など)に含める予定はありますか? また、誰かがいずれかの手法(つまり、マクロガードと#pragma once)を使用する際の利点/欠点についてさらに詳しく説明できるとよいでしょう。

3
どのiomanipマニピュレーターが「粘着性」がありますか?
私は最近、明示的に変更するまで、すべての挿入の文字列ストリームに影響を与えるstringstreamと誤って想定しているため、原因の作成に問題がありましたstd::setw()。ただし、挿入後は常に設定解除されます。 // With timestruct with value of 'Oct 7 9:04 AM' std::stringstream ss; ss.fill('0'); ss.setf(ios::right, ios::adjustfield); ss << setw(2) << timestruct.tm_mday; ss << timestruct.tm_hour; ss << timestruct.tm_min; std::string filingTime = ss.str(); // BAD: '0794' だから、私はいくつかの質問があります: なぜsetw()このようになるのですか? このように他のマニピュレーターはありますか? 間の行動に差があるstd::ios_base::width()とは、std::setw()? 最後に、この動作を明確に文書化したオンラインリファレンスがありますか?私のベンダーのドキュメント(MS Visual Studio 2005)はこれを明確に示していないようです。
140 c++  c++-faq 

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