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

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

1
C ++ 17並列 `for_each`のスレッド数を制限することは可能ですか?
私はstd::for_eachwith を使用しstd::execution::parて、構造のベクトルとして表される巨大な入力に対して複雑な計算を実行します。計算には、ハードウェア(ネットワークやディスクIOなど)に関連する遅延は必要ありません。これは「単なるCPU」計算です。私にとっては、ハードウェアスレッドのようにOSスレッドを増やす必要はないのは当然のことです。ただし、Visual C ++ 2019では、平均50スレッドが作成され、ハードウェアスレッドが12しかない場合でも最大500スレッド作成されることがあります。 並列スレッドを制限するが方法はにカウントされhardware_concurrencyてstd::for_eachおよびstd::execution::par、またはカウント合理的なスレッドを作成するための唯一の方法はでカスタムコードを使用することですかstd::thread?

2
C ++でソリューションをビルドした後、VCRUNTIME140_1.dllが見つからない
小さなテキストアドベンチャーを作成しました。リリースとx64設定を使用してVisual Studio Community 2019でソリューションを構築しました。* .exeファイルを他の生成されたファイルと共に圧縮して、VSがインストールされていない別のPCに送信したところ、イメージに表示されるエラーが発生しました。私は自分のPCを検索しましたが、ファイルはいくつかの異なるフォルダーに存在し、そのうちの1つはsystem32なので、新しいPCのどこにファイルを配置するのかわかりません。 任意の助けいただければ幸いです。ありがとうございました
10 c++  dll 

2
異なるC ++コンパイラ間での自動型の推測の不一致
だから、私はドット積を実装しようとしています( https://en.wikipedia.org/wiki/Dot_product)を最新のC ++のいくつかのフレーバーで、次のコードを考え出しました: #include <iostream> template<class... Args> auto dot(Args... args) { auto a = [args...](Args...) { return [=](auto... brgs) { static_assert(sizeof...(args) == sizeof...(brgs)); auto v1 = {args...}, i1 = v1.begin(); auto v2 = {brgs...}, i2 = v2.begin(); typename std::common_type<Args...>::type s = 0; while( i1 != v1.end() && i2!= v2.end()) { …

1
必要な式は、囲んでいるスコープの変数を「キャプチャ」することを許可されていますか?
次の例では、関数の引数を使用してrequire式を使用し、それらを使用する式が整形式であるかどうかをテストしています。require式は引数を取りません。関数スコープ内の変数を直接使用します。 #include <cstddef> #include <vector> template<typename T> void Resize(T &v, std::size_t const n) { if constexpr (requires { v.resize(n); }) v.resize(n); } template<typename T> void Eziser(T &v, std::size_t const n) { if constexpr (requires { v.eziser(n); }) v.eziser(n); } int main() { std::vector<int> v; Resize(v, 10u); Eziser(v, 10u); } 上記のコードは、Clangコンセプトブランチでコンパイルされます。ただし、GCC10はへの呼び出しのみを受け入れますResize。GCC9 …

2
コンパイラーは未使用の静的なthread_localクラスメンバーを無視しましたか?
クラスでスレッド登録をしたいので、thread_local機能のチェックを追加することにします。 #include <iostream> #include <thread> class Foo { public: Foo() { std::cout << "Foo()" << std::endl; } ~Foo() { std::cout << "~Foo()" << std::endl; } }; class Bar { public: Bar() { std::cout << "Bar()" << std::endl; //foo; } ~Bar() { std::cout << "~Bar()" << std::endl; } private: static thread_local …

2
チェーン時にコピーを回避する方法は?
以下の小さな例のように、連鎖タイプのクラスを作成しています。メンバー関数をチェーンすると、コピーコンストラクターが呼び出されるようです。コピーコンストラクタの呼び出しを取り除く方法はありますか?以下の私のおもちゃの例では、私が一時的なものだけを扱っていることは明らかであり、したがって、(標準ではないかもしれませんが、論理的には)省略があるはずです。省略をコピーするための2番目の最適な選択は、移動コンストラクターを呼び出すことですが、これは当てはまりません。 class test_class { private: int i = 5; public: test_class(int i) : i(i) {} test_class(const test_class& t) { i = t.i; std::cout << "Copy constructor"<< std::endl; } test_class(test_class&& t) { i = t.i; std::cout << "Move constructor"<< std::endl; } auto& increment(){ i++; return *this; } }; int main() { …
10 c++  c++14  c++17 

3
次の場合に依存型にtypenameを使用する必要がないのはなぜですか?
型の参照の削除については、ここで読んでいます。 次の例を示します。 #include <iostream> // std::cout #include <type_traits> // std::is_same template<class T1, class T2> void print_is_same() { std::cout << std::is_same<T1, T2>() << '\n'; } int main() { std::cout << std::boolalpha; print_is_same<int, int>(); print_is_same<int, int &>(); print_is_same<int, int &&>(); print_is_same<int, std::remove_reference<int>::type>(); // Why not typename std::remove_reference<int>::type ? print_is_same<int, std::remove_reference<int &>::type>();// Why …

5
動的リンク-Linux対。ウィンドウズ
Windowsでは、MSVCのDLLプロジェクトでC / C ++コードをコンパイルすると、2つのファイルが取得されます。 MyDll.dll MyDll.lib 私が理解しMyDll.libている限り、DLL内の関数の場所を示すポインタテーブルの種類が含まれています。このdllを使用すると、たとえばexeファイルで、MyDll.libリンケージ時にexeファイルに埋め込まれるため、実行時に関数がどこにあるかを「認識」し、関数MyDll.dllを使用できます。 しかし、Linuxで同じコードをコンパイルすると、1つのファイル(Linuxのファイルに相当)MySo.soなし で1つしか得られないので、リンク時に何も埋め込まれていない場合、Linuxの実行可能ファイルは関数の場所をどのようにして知るのでしょうか。MySo.alibMySo.so


2
SWIGでnumpy配列をvector <int>&(参照)に変換する方法
私の目標: Pythonで3つのnumpy配列を作成し(そのうち2つは特定の値で初期化されます)、3つすべてをswigを介してc ++関数にベクトル参照として送信します(これは、データのコピーと効率の低下を避けるためです)。c ++関数に入ったら、2つの配列を追加し、それらの合計を3番目の配列に入れます。 vec_ref.h #include &lt;vector&gt; #include &lt;iostream&gt; void add_vec_ref(std::vector&lt;int&gt;&amp; dst, std::vector&lt;int&gt;&amp; src1, std::vector&lt;int&gt;&amp; src2); vec_ref.cpp #include "vec_ref.h" #include &lt;cstring&gt; // need for size_t #include &lt;cassert&gt; void add_vec_ref(std::vector&lt;int&gt;&amp; dst, std::vector&lt;int&gt;&amp; src1, std::vector&lt;int&gt;&amp; src2) { std::cout &lt;&lt; "inside add_vec_ref" &lt;&lt; std::endl; assert(src1.size() == src2.size()); dst.resize(src1.size()); for (size_t i = 0; …
10 python  c++  numpy  vector  swig 



2
未定義のC ++の動作がCの定義された動作と一致するとどうなりますか?
*.cpp(Cコンパイラではなく)C ++でコンパイルするファイルがあります。含まれている関数は、Cで定義されているように見えるキャスト(最後の行を参照)に依存していますが(間違っている場合は修正してください!)、この特別な型のC ++ではありません。 [...] C++ code [...] struct sockaddr_in sa = {0}; int sockfd = ...; sa.sin_family = AF_INET; sa.sin_port = htons(port); bind(sockfd, (struct sockaddr *)&amp;sa, sizeof sa); [...] C++ code [...] これをC ++ファイルでコンパイルしたので、これは現在定義済みまたは未定義の動作ですか?または*.c、これをファイルに移動して、動作を定義する必要がありますか?


2
浮動小数点定数の疑似デストラクターを呼び出す有効な構文
次のデモプログラムを検討してください。 #include &lt;iostream&gt; int main() { typedef float T; 0.f.T::~T(); } このプログラムはによってコンパイルされMicrosoft Visual Studio Community 2019ます。 しかしclang、gccこのようなエラーを発行します prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T' 7 | 0.f.T::~T(); | ^~~~~ このような式を記述する場合、( 0.f ).T::~T()3つのコンパイラすべてがプログラムをコンパイルします。 したがって、疑問が生じ0.f.T::~T()ます。このレコードは構文的に有効ですか?そうでない場合、どの構文規則が違反していますか?

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