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

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

4
メソッドチェーンにおけるC ++実行順序
このプログラムの出力: #include <iostream> class c1 { public: c1& meth1(int* ar) { std::cout << "method 1" << std::endl; *ar = 1; return *this; } void meth2(int ar) { std::cout << "method 2:"<< ar << std::endl; } }; int main() { c1 c; int nu = 0; c.meth1(&nu).meth2(nu); } です: method 1 …

17
未解決の外部シンボル__imp__fprintfおよび__imp ____ iob_func、SDL2
誰かが何を説明できますか __imp__fprintf そして __imp____iob_func 未解決の外部手段? コンパイルしようとしているときにこれらのエラーが発生するため: 1>SDL2main.lib(SDL_windows_main.obj) : error LNK2019: unresolved external symbol __imp__fprintf referenced in function _ShowError 1>SDL2main.lib(SDL_windows_main.obj) : error LNK2019: unresolved external symbol __imp____iob_func referenced in function _ShowError 1>E:\Documents\Visual Studio 2015\Projects\SDL2_Test\Debug\SDL2_Test.exe : fatal error LNK1120: 2 unresolved externals 私はすでに問題が間違ったリンクからではないと言うことができます。すべてを正しくリンクしましたが、何らかの理由でコンパイルできません。 SDL2を使用しようとしています。 コンパイラとしてVisual Studio 2015を使用しています。 リンカー->入力->追加の依存関係でSDL2.libとSDL2main.libにリンクし、VC ++ディレクトリが正しいことを確認しました。

10
C ++でプライベート静的constマップを初期化する方法は?
辞書または連想配列string=> だけが必要intです。 この場合の型マップC ++があります。 しかし、すべてのインスタンス(->静的)に必要なマップは1つだけであり、このマップは変更できません(-> const)。 私はこの方法をブーストライブラリで見つけました std::map<int, char> example = boost::assign::map_list_of(1, 'a') (2, 'b') (3, 'c'); このlibなしの他の解決策はありますか?私はこのようなものを試しましたが、マップの初期化には常にいくつかの問題があります。 class myClass{ private: static map<int,int> create_map() { map<int,int> m; m[1] = 2; m[3] = 4; m[5] = 6; return m; } static map<int,int> myMap = create_map(); };

5
パラメータを正しく渡す方法は?
私はC ++初心者ですが、プログラミング初心者ではありません。私はC ++(c ++ 11)を学ぼうとしていますが、最も重要なこと、つまりパラメーターを渡すことは、ちょっとわかりません。 私はこれらの簡単な例を考えました: すべてのメンバーのプリミティブ型を持つクラス: CreditCard(std::string number, int expMonth, int expYear,int pin):number(number), expMonth(expMonth), expYear(expYear), pin(pin) メンバーとしてプリミティブ型と1つの複合型を持つクラス: Account(std::string number, float amount, CreditCard creditCard) : number(number), amount(amount), creditCard(creditCard) メンバーとしてプリミティブ型といくつかの複合型の1つのコレクションを持つクラス: Client(std::string firstName, std::string lastName, std::vector<Account> accounts):firstName(firstName), lastName(lastName), accounts(accounts) アカウントを作成するときは、次のようにします。 CreditCard cc("12345",2,2015,1001); Account acc("asdasd",345, cc); このシナリオでは明らかにクレジットカードが2回コピーされます。そのコンストラクタを次のように書き換えると Account(std::string number, float amount, CreditCard& creditCard) …
108 c++  c++11 

13
C ++での効率的な文字列連結
std :: stringの "+"演算子や、連結を高速化するためのさまざまな回避策について心配を表明している人がいると聞いたことがあります。これらのどれが本当に必要ですか?もしそうなら、C ++で文字列を連結する最良の方法は何ですか?

6
C / C ++構造体とクラス
C ++クラスを完成した後、構造体/クラスは、いくつかの小さな違いを除いて実質的に同じであるように見えました。 私はこれまでCでプログラミングしたことがありません。しかし、私はそれが構造を持っていることを知っています。Cでは、他の構造体を継承し、パブリック/プライベートの修飾子を設定することは可能ですか? これを通常のCで実行できる場合、なぜ世界中でC ++が必要なのでしょうか。クラスと構造体の違いは何ですか?
108 c++  class  struct 

8
.cppファイルでC ++名前空間メソッドを定義する正しい方法
おそらく重複していますが、簡単に検索することはできません... 次のようなヘッダーがあるとします。 namespace ns1 { class MyClass { void method(); }; } 私はmethod().cppファイルでいくつかの方法で定義されているのを見ました: バージョン1: namespace ns1 { void MyClass::method() { ... } } バージョン2: using namespace ns1; void MyClass::method() { ... } バージョン3: void ns1::MyClass::method() { ... } それを行う「正しい」方法はありますか?これらはすべて同じ意味ではないという点で「間違った」ものはありますか?


8
CMAKEのOS固有の手順:方法
私はCMAKEの初心者です。以下は、mingw環境ウィンドウでうまく機能する単純なcmakeファイルです。問題は明らかにtarget_link_libraries()、libwsock32.aをリンクしているCMAKEの機能にあります。Windowsではこれが機能し、結果が得られます。 ただし、予想通り、Linuxでは、Linux OSにはないもの/usr/bin/ldを探します-lwsock32。 私の問題は、Linux OSでwsock32ライブラリをリンクしないようにCMAKEにどのように指示するのですか? どんな助けでも大歓迎です。 私のシンプルなCMakeファイル: PROJECT(biourl) set (${PROJECT_NAME}_headers ./BioSocketAddress.h ./BioSocketBase.h ./BioSocketBuffer.h ./BioSocketCommon.h ./BioSocketListener.h ./BioSocketPrivate.h ./BioSocketStream.h ./BioUrl.h BioDatabase.h ) set (${PROJECT_NAME}_sources BioSocketAddress.C BioSocketBase.C BioSocketCommon.C BioSocketStream.C BioUrl.C BioDatabase.C ) add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources} ) # linkers #find_library(ws NAMES wsock32 PATHS ${PROJECT_SOURCE_DIR} NO_SYSTEM_ENVIRONMENT_PATH NO_DEFAULT_PATH) target_link_libraries(${PROJECT_NAME} bioutils wsock32) install (TARGETS ${PROJECT_NAME} RUNTIME …
108 c++  linux  cmake  mingw  portability 

3
高速整数型が他の整数型よりも速いのはなぜですか?
ISO / IEC 9899:2018(C18)では、7.20.1.3に規定されています。 7.20.1.3最短の最小幅整数型 1次の各タイプは、少なくとも指定された幅を持つすべての整数型の中で動作するのに通常最も高速な整数型を指定しています268)。 2 typedef名int_fastN_tは、幅がN以上uint_fastN_tの最速の符号付き整数型を示します。typedef名は、幅がN以上の最速の符号なし整数型を示します。 3次のタイプが必要です。 int_fast8_t、int_fast16_t、int_fast32_t、int_fast64_t、 uint_fast8_t、uint_fast16_t、uint_fast32_t、uint_fast64_t このフォームの他のすべてのタイプはオプションです。 268)指定されたタイプがすべての目的で最速であるとは限りません。実装が1つの型を選択する明確な根拠がない場合、符号型と幅の要件を満たす整数型を選択するだけです。 しかし、これらの「高速」整数型がより高速である理由は明記されていません。 これらの高速整数型が他の整数型よりも速いのはなぜですか? 高速整数型はC ++ 17のヘッダーファイルでも利用できるため、C ++で質問にタグを付けましたcstdint。残念ながら、ISO / IEC 14882:2017(C ++ 17)では、その説明についてそのようなセクションはありません。それ以外の場合は質問の本文にそのセクションを実装しました。 情報:Cでは、のヘッダーファイルで宣言されていますstdint.h。
107 c++  c  performance  types  int 

5
スレッド間で共有変数を変更するコードが競合状態の影響を受けないのはなぜですか?
私はCygwin GCCを使用しており、次のコードを実行します。 #include <iostream> #include <thread> #include <vector> using namespace std; unsigned u = 0; void foo() { u++; } int main() { vector<thread> threads; for(int i = 0; i < 1000; i++) { threads.push_back (thread (foo)); } for (auto& t : threads) t.join(); cout << u << endl; return …

10
一時を禁止する方法
クラスFooに、名前を付けずに構築を禁止する方法はありますか? 例えば: Foo("hi"); そして、次のような名前を付けた場合にのみ許可しますか? Foo my_foo("hi"); 最初のライフタイムは単にステートメントであり、2番目のライフタイムは囲みブロックです。私の使用例でFooは、コンストラクタとデストラクタの間の時間を測定しています。ローカル変数を参照することはないので、ローカル変数を入れ忘れて、誤って有効期間を変更してしまうことがよくあります。代わりにコンパイル時エラーが発生します。
107 c++ 

10
C ++:どの正規表現ライブラリを使用すればよいですか?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 5年前休業。 この質問を改善する 私は、Linuxベースのシステムで実行される商用(オープンソースではない)C ++プロジェクトに取り組んでいます。C ++コード内でいくつかの正規表現を実行する必要があります。(私は知っています:私は今2つの問題を抱えています。) 質問:C / C ++から正規表現を定期的に行う人は、どのライブラリを検討することをお勧めしますか?簡単な検索で、次のことに注意が向けられました。 1)Boost.Regex(Boostソフトウェアライセンスを読む必要がありますが、この質問はソフトウェアライセンスに関するものではありません) 2)C(C ++ではない)POSIX正規表現(#include <regex.h>、regcomp、regexecなど) 3)http://freshmeat.net/projects/cpp_regex/ (これについては何も知りません。GPLのようですので、このプロジェクトでは使用できません)
107 c++  regex  linux 

7
RTTIを使用するよりも「純粋なポリモーフィズム」が望ましいのはなぜですか?
この種のことを説明しているほとんどすべてのC ++リソースは、RTTI(ランタイム型識別)を使用するよりもポリモーフィックなアプローチを好むべきだと私に教えています。一般に、私はこの種のアドバイスを真剣に受け止め、その根拠を理解しようとします-結局のところ、C ++は強力な獣であり、その完全な深さを理解することは困難です。ただし、この特定の質問については、空白を描いています。インターネットがどのようなアドバイスを提供できるかを確認したいと思います。まず、RTTIが「有害であると見なされている」理由として引用されている一般的な理由を挙げて、これまでに学んだことを要約しましょう。 一部のコンパイラはそれを使用しません/ RTTIは常に有効ではありません 私は本当にこの議論を買いません。これは、C ++ 14の機能を使用するべきではないと言っているようなものです。C++ 14の機能をサポートしていないコンパイラが世に出ているからです。それでも、C ++ 14機能の使用を思いとどまらせる人はいません。プロジェクトの大部分は、使用しているコンパイラーとその構成方法に影響を与えます。gccのマンページを引用しても: -fno-rtti C ++ランタイム型識別機能(dynamic_castおよびtypeid)で使用する仮想関数を持つすべてのクラスに関する情報の生成を無効にします。言語のこれらの部分を使用しない場合は、このフラグを使用してスペースを節約できます。例外処理は同じ情報を使用しますが、G ++は必要に応じてそれを生成することに注意してください。dynamic_cast演算子は、実行時の型情報を必要としないキャスト、つまり「void *」または明確な基本クラスへのキャストに引き続き使用できます。 これは、RTTIを使用していない場合は無効にできることを示しています。つまり、Boostを使用していない場合は、Boostにリンクする必要はありません。誰かがでコンパイルする場合を想定する必要はありません-fno-rtti。さらに、この場合、コンパイラは大音量でクリアします。 追加のメモリが必要/遅くなる可能性がある RTTIを使いたくなったときはいつでも、ある種の型情報やクラスの特性にアクセスする必要があります。RTTIを使用しないソリューションを実装する場合、これは通常、この情報を格納するためにいくつかのフィールドをクラスに追加する必要があることを意味します。そのため、memory引数は一種の無効です(この例は後で説明します)。 実際、dynamic_castは遅くなる可能性があります。ただし、スピードが重要な状況での使用を回避する方法は通常いくつかあります。そして、私は代替案をまったく見ていません。このSOの回答は、基本クラスで定義された列挙型を使用して型を格納することを提案しています。これは、すべての派生クラスを事前に知っている場合にのみ機能します。それはかなり大きな「もし」だ! その回答から、RTTIのコストも明確ではないようです。異なる人々は異なるものを測定します。 エレガントなポリモーフィックデザインはRTTIを不要にします これは私が真剣に受け止めている一種のアドバイスです。この場合、自分のRTTIユースケースをカバーする優れた非RTTIソリューションを思い付くことはできません。例を挙げましょう。 ある種のオブジェクトのグラフを処理するライブラリを書いているとしましょう。ライブラリを使用するときにユーザーが独自の型を生成できるようにしたい(そのため、enumメソッドは使用できません)。私のノードの基本クラスがあります: class node_base { public: node_base(); virtual ~node_base(); std::vector< std::shared_ptr<node_base> > get_adjacent_nodes(); }; 現在、私のノードはさまざまなタイプにすることができます。これらはどうですか: class red_node : virtual public node_base { public: red_node(); virtual ~red_node(); void get_redness(); …
107 c++  polymorphism  rtti 

4
ベンチマーク(BLASを使用したpython vs. c ++)と(numpy)
BLASとLAPACKの線形代数機能を多用するプログラムを書きたいと思います。パフォーマンスは問題なので、いくつかのベンチマークを行い、知りたいのですが、私が取ったアプローチが正当なものかどうかを確認します。 私は、いわば3人の競技者がいて、単純な行列と行列の乗算でそのパフォーマンスをテストしたいと考えています。出場者は次のとおりです。 Numpy、の機能のみを利用dot。 Python、共有オブジェクトを介してBLAS機能を呼び出します。 C ++、共有オブジェクトを介してBLAS機能を呼び出す。 シナリオ さまざまな次元の行列-行列乗算を実装しましたi。i5の増分で5〜500が実行され、matricies m1とはm2、このように設定されています。 m1 = numpy.random.rand(i,i).astype(numpy.float32) m2 = numpy.random.rand(i,i).astype(numpy.float32) 1. Numpy 使用されるコードは次のようになります。 tNumpy = timeit.Timer("numpy.dot(m1, m2)", "import numpy; from __main__ import m1, m2") rNumpy.append((i, tNumpy.repeat(20, 1))) 2. Python、共有オブジェクトを介してBLASを呼び出す 機能付き _blaslib = ctypes.cdll.LoadLibrary("libblas.so") def Mul(m1, m2, i, r): no_trans = c_char("n") n = c_int(i) one …
107 c++  python  numpy  benchmarking  blas 

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