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

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

9
カタリナC ++:<cmath>ヘッダーを使用するとエラーが発生:グローバル名前空間に 'signbit'という名前のメンバーがない
MojaveからCatalinaにアップグレードした後、環境設定で/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdkをセットアップします。 &lt;cmath&gt;ヘッダーを使用するプログラムをコンパイルできません。 CFLAGS、CCFLAGS、CXXFLAGSを変更して、何も変更しないMacOSSDKの場所を指すようにした Scanning dependencies of target OgreMain /Applications/Xcode.app/Contents/Developer/usr/bin/make -f OgreMain/CMakeFiles/OgreMain.dir/build.make OgreMain/CMakeFiles/OgreMain.dir/build [ 0%] Building CXX object OgreMain/CMakeFiles/OgreMain.dir/src/OgreASTCCodec.cpp.o cd /Users/roman/Downloads/ogre-1.12.2/build/OgreMain &amp;&amp; /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DOgreMain_EXPORTS -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/src/OSX -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/include/Threading -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/src -I/Users/roman/Downloads/ogre-1.12.2/build/Dependencies/include -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/include -I/Users/roman/Downloads/ogre-1.12.2/build/include -I/Users/roman/Downloads/ogre-1.12.2/OgreMain -isystem /usr/local/include -Wall -Winit-self -Wcast-qual -Wwrite-strings -Wextra -Wundef -Wmissing-declarations -Wno-unused-parameter -Wshadow -Wno-missing-field-initializers -Wno-long-long -Wno-inconsistent-missing-override -msse -O3 -DNDEBUG -arch x86_64 …

5
全長より短い桁数のSTLを使用してC ++で順列を作成する方法
私が持っているc++ vectorとstd::pair&lt;unsigned long, unsigned long&gt;、オブジェクト。私はを使用してベクトルのオブジェクトの順列を生成しようとしていますstd::next_permutation()。ただし、permutations予想される返される順列のサイズが指定されているpython の関数と同様に、順列を特定のサイズにする必要があります。 基本的には、c++同等の import itertools list = [1,2,3,4,5,6,7] for permutation in itertools.permutations(list, 3): print(permutation) Pythonデモ (1, 2, 3) (1, 2, 4) (1, 2, 5) (1, 2, 6) (1, 2, 7) (1, 3, 2) (1, 3, 4) .. (7, 5, 4) (7, 5, 6) (7, 6, 1) …

4
コンパイル時にメソッドが1か所で呼び出されるようにする
コンパイル時にメソッドが正確に1か所で呼び出されるようにすることが可能かどうかについて知りたいです。 関数が2回以上呼び出されても問題ないことに注意してください(例:ループ内)-ただし、2つの別々のループで呼び出されるべきではありません。 これは二つの部分に分けることができ、私もどちらかの一部を覆うソリューションに興味があります: ()メソッドを確保するが、少なくとも一箇所に呼び出された 中で呼び出された(b)の方法を確保多くても1つの場所で 私はコードの構造を完全に制御しており、同じアイデアを実現するさまざまなイディオムを歓迎します。 // class.h class MyClass { public: void my_method(); } 以下はコンパイルされるべきではありません(決して呼び出されません) #include "class.h" int main() { MyClass my_class; } 以下はコンパイルしないでください(複数の場所で呼び出されます) #include "class.h" int main() { MyClass my_class; my_class.my_method(); while(true) { my_class.my_method(); } } 以下はコンパイルする必要があります(1か所で呼び出されます)。 #include "class.h" int main() { MyClass my_class; while(true) { my_class.my_method(); } …
15 c++ 

3
最も安価な引数の型を決定するコンパイル時の方法
このようなテンプレートがあります template &lt;typename T&gt; class Foo { public: Foo(const T&amp; t) : _t(t) {} private: const T _t; }; 引数の型がブールや文字のように取るに足らない場合にconst参照の使用を回避するための精通したテンプレートメタプログラミング方法はありますか?お気に入り: Foo(stl::smarter_argument&lt;T&gt;::type t) : _t(t) {}
15 c++  stl 

4
std :: mapのキーからリソースを盗むことはできますか?
C ++では、後で不要になったマップからリソースを盗んでも大丈夫ですか?より正確には、std::mapwith std::stringキーがあり、をmap使用してsキーのリソースを盗むことでそれからベクターを構築したいと仮定しますstd::move。キーへのそのような書き込みアクセスは、内部データ構造(キーの順序)を破壊することに注意してください。ただし、map後で使用することはしません。 質問:問題なくこれを実行できますか?または、意図されていないmap方法でアクセスしたために、たとえばのデストラクタで予期しないバグが発生std::mapしますか? 以下はプログラム例です。 #include&lt;map&gt; #include&lt;string&gt; #include&lt;vector&gt; #include&lt;iostream&gt; using namespace std; int main(int argc, char *argv[]) { std::vector&lt;std::pair&lt;std::string,double&gt;&gt; v; { // new scope to make clear that m is not needed // after the resources were stolen std::map&lt;std::string,double&gt; m; m["aLongString"]=1.0; m["anotherLongString"]=2.0; // // now steal resources for (auto &amp;p …

1
C ++コンパイラーはどのようにして外部変数を見つけますか?
このプログラムをg ++とclang ++でコンパイルします。違いがあります: g ++は1を出力しますが、clang ++は2を出力 します 。g++:extern変数は最も短いスコープで定義されているようです。 clang ++:extern変数は最短のグローバルスコープで定義されます。 C ++仕様にはその仕様がありますか? main.cpp #include &lt;iostream&gt; static int i; static int *p = &amp;i; int main() { int i; { extern int i; i = 1; *p = 2; std::cout &lt;&lt; i &lt;&lt; std::endl; } } other.cpp int i; バージョン:g ++:7.4.0 …

5
マクロを使用してソースファイルの行を数えますか?
C / C ++プリプロセッサを使用して、ソースファイル内の行をマクロまたは何らかのコンパイル時に使用可能な値にカウントすることは可能ですか?例えば私は置き換えることができMAGIC1、MAGIC2かつMAGIC3使用している場合、以下では、何とか値4を取得しますかMAGIC3? MAGIC1 // can be placed wherever you like before the relevant // lines - either right before them, or in global scope etc. foo(); MAGIC2 bar(); MAGIC2 baz(); MAGIC2 quux(); MAGIC2 // ... possibly a bunch of code here; not guaranteed to be in same scope …

2
なぜ `std :: basic_ios`にパブリックコンストラクタがあるのですか?
std::basic_iosパブリックコンストラクタがあります: explicit basic_ios (std::basic_streambuf&lt;CharT,Traits&gt;* sb); IMO、クラスがパブリックコンストラクターを持つ唯一の理由は、プログラムでそのクラスのスタンドアロンインスタンスを使用することです。クラスが存在し、他のクラスがそのクラスの子孫である場合のみ(の場合のようにbasic_ios)、クラスのすべてのコンストラクターはでなければなりませんprotected。のコンストラクタstd::ios_baseはすべて保護されています。しかし、何らかの理由で、標準の設計者はこれをbasic_iospublicの1つのコンストラクターにしました。 basic_iosは、いくつかのストリームタイプの基本クラスとして使用されます。少なくとも、basic_istreamまたはでなかった使用例を想定することはできませんbasic_ostream。ありますか?

5
テンプレートクラスを生成するためのforループにconst変数を含めるにはどうすればよいですか?
私のようなコードがあります template &lt;size_t N&gt; class A { template &lt;size_t N&gt; someFunctions() {}; }; 次に、クラスのインスタンスを作成し、そのような関数をforループで呼び出して、次のような多くの値のセットを取得します // in main() int main() { for (int i = 1; i &lt;= 100; i++) { const int N = i; // dont know how to do this A&lt;N&gt; a; a.functionCalls(); } } これを行う方法?これを行う方法を期待しています。

3
整数Nが指定されています。数字が0または1のみであるNより大きい最小の整数は何ですか?
私は整数Nを持っています。0または1以外の数字を含まない、Nより大きい最小の整数を見つける必要があります。例:N = 12次に、答えは100です。私はC ++でブルートフォースアプローチをコーディングしました。 int main() { long long n; cin &gt;&gt; n; for (long long i = n + 1; ; i++) { long long temp = i; bool ok = true; while (temp != 0) { if ( (temp % 10) != 0 &amp;&amp; (temp % 10) != …
15 c++  algorithm 

2
関数オブジェクトを使用するC ++スレッド、複数のデストラクタはどのように呼び出されますが、コンストラクタは呼び出されないのですか?
以下のコードスニペットを見つけてください。 class tFunc{ int x; public: tFunc(){ cout&lt;&lt;"Constructed : "&lt;&lt;this&lt;&lt;endl; x = 1; } ~tFunc(){ cout&lt;&lt;"Destroyed : "&lt;&lt;this&lt;&lt;endl; } void operator()(){ x += 10; cout&lt;&lt;"Thread running at : "&lt;&lt;x&lt;&lt;endl; } int getX(){ return x; } }; int main() { tFunc t; thread t1(t); if(t1.joinable()) { cout&lt;&lt;"Thread is joining..."&lt;&lt;endl; t1.join(); } …

1
古いalloctaor :: constructと新しいalloctaor :: constructの違いは何ですか?
私が知っているようにstd::allocator&lt;T&gt;::construct、C ++の古いバージョンでは2つのパラメーターしか使用しません。T1つ目は、型のオブジェクトを構築する生の未構築メモリへのポインタで、2つ目は、そのオブジェクトを初期化するための要素型の値です。したがって、コピーコンストラクタが呼び出されます。 struct Foo { Foo(int, int) { cout &lt;&lt; "Foo(int, int)" &lt;&lt; endl; } /*explicit*/ Foo(int) { cout &lt;&lt; "Foo(int)" &lt;&lt; endl; } Foo(const Foo&amp;) { cout &lt;&lt; "Foo(const Foo&amp;)" &lt;&lt; endl; } }; int main(int argc, char* argv[]) { allocator&lt;Foo&gt; a; Foo* const p = a.allocate(200, NULL); // …
15 c++  allocator 

2
有効なC ++プログラムを終了しないプログラムですか?
プログラムを終了する必要がありますか?言い換えれば、技術的に未定義の動作を永久に実行するプログラムですか?これは空のループについてではないことに注意してください。「もの」(つまり、観察可能な動作)を永遠に行うプログラムについて話す。 たとえば、次のようなもの: int main() { while (true) { try { get_input(); // calls IO process(); put_output(); // calls IO, has observable behavior // never break, exit, terminate, etc } catch(...) { // ignore all exceptions // don't (re)throw // never go out of loop } } } 経験的にすべての正気なコンパイラは、上記の種類のプログラムに対して期待されるコードを生成するため(これは他のUBのソースがないことを前提としています)、これはより学術的な質問です。そしてもちろん、終了しないプログラム(OS、埋め込み、サーバー)はたくさんあります。しかし、標準は時々風変わりなので、質問です。 接線:「アルゴリズム」の多くの(一部の?)定義では、アルゴリズムを終了する必要があります。つまり、終了しない一連の操作はアルゴリズムとは見なされません。 接線。停止問題は、任意のプログラムが入力に対して終了するかどうかを判別するアルゴリズムが存在できないことを示しています。ただし、この特定のプログラムの場合、メインから抜け出す原因となる分岐がないため、コンパイラーはプログラムが終了しないことを容易に判別できます。質問は言語弁護士なので、これは無関係です。

2
C ++ 20の前にstd :: swapがconstexprとマークされていないのはなぜですか?
C ++ 20ではstd::swap、constexpr関数になります。 標準ライブラリは、マーキングの点constexprで言語に遅れを取っていることを知っていますが、2017年まで&lt;algorithm&gt;に、他の多くのものと同様にconstexprになりました。まだ-ありstd::swapませんでした。そのマーキングを妨げる奇妙な言語の欠陥があったことを漠然と覚えていますが、詳細を忘れています。 誰かがこれを簡潔かつ明確に説明できますか? 動機:C ++ 11 / C ++ 14コードで-のstd::swap()ような関数をマークすることがなぜ悪い考えであるのかを理解する必要がありconstexprます。

2
std :: chrono :: yearsストレージは本当に少なくとも17ビットですか?
cppreferenceから std::chrono::years (since C++20) duration&lt;/*signed integer type of at least 17 bits*/, std::ratio&lt;31556952&gt;&gt; を使用libc++すると、16ビットに署名されているstd::chrono::yearsis の下線付きストレージが表示さshortれます。 std::chrono::years( 30797 ) // yields 32767/01/01 std::chrono::years( 30797 ) + 365d // yields -32768/01/01 apparently UB cppreferenceまたは何か他のタイプミスはありますか? 例: #include &lt;fmt/format.h&gt; #include &lt;chrono&gt; template &lt;&gt; struct fmt::formatter&lt;std::chrono::year_month_day&gt; { char presentation = 'F'; constexpr auto parse(format_parse_context&amp; ctx) …
14 c++  chrono  c++20  libc++ 

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