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

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

2
派生型を知らずに、派生ポインタを含むstd :: anyをベースポインタにキャストする方法はありますか?
std::any特定の基本クラスの派生クラスへのポインタを含む場合と含まない場合があるオブジェクトがあるとしますB。私ができることはありますか? 返しB *、あればstd::anyオブジェクトはコンバーチブル何かを保持するB *、または そうでない場合、例外をスローしますか? それはのように思えるdynamic_castし、std::any_castそれぞれが、この機能の半分を提供しますが、私は2つを一緒に入れてのいずれかの方法で表示されません。 に変換可能なすべての型を明示的に列挙することを含むさまざまな方法でこれを機能させることができることは知っていますがB *、それはすべてのDRY違反の母です。 使用例: std::vector<std::any> setupTools(const std::string & confFile) { std::vector<std::any> myTools; auto conf = parse(confFile); for(std::string & wrenchInfo : conf["Wrenches"]) { Wrench::setup(myTools, wrenchInfo); } for(std::string & hammerInfo : conf["Hammers"]) { Hammer::setup(myTools, hammerInfo); } // 25 more kinds of tools } Factory1::init(const std::vector<std::any> & tools) …
8 c++  stdany 

2
パラメーターの順序にとらわれないstd :: same_asの一般化された形式(つまり、2つ以上の型パラメーター)を実装する方法は?
バックグラウンド 概念std::same_asは順序にとらわれない(つまり、対称)ことを知っています。std::same_as<T, U>これは、std::same_as<U, T>(関連する質問)と同等です。この質問では、より一般的なものを実装したいと思います。それはtemplate <typename ... Types> concept same_are = ...、パック内の型Typesが互いに等しいかどうかをチェックします。 私の試み #include <type_traits> #include <iostream> #include <concepts> template <typename T, typename... Others> concept same_with_others = (... && std::same_as<T, Others>); template <typename... Types> concept are_same = (... && same_with_others<Types, Types...>); template< class T, class U> requires are_same<T, U> void foo(T …

2
多重継承は、疑わしいあいまいな仮想関数の過負荷につながります
この例では、クラスFooとBarはライブラリから提供されています。私のクラスBazは両方から継承します。 struct Foo { void do_stuff (int, int); }; struct Bar { virtual void do_stuff (float) = 0; }; struct Baz : public Foo, public Bar { void func () { do_stuff (1.1f); // ERROR HERE } }; struct BazImpl : public Baz { void do_stuff (float) override {}; }; …

1
{0}で構造体を初期化しています
私は本質的にこれと同じであるいくつかのコードをデバッグしています: struct Foo { int a; int b; }; struct Bar { Bar() {} Foo foo{0}; }; 私はのインスタンスを作成するときBar、それは両方のように思えるaし、bゼロに初期化されています。これは保証されていますか?これは仕様のどこにありますか?

2
C ++で負の数と正の数の両方を含む文字列の配列を並べ替える方法は?
String str[]={"-123","89","-10","456"}; str文字列の配列であり、各文字列は整数の形式であり、この配列に対してO(n log n)時間内にソートを実行する必要があります。 の文字列はstr、正と負の両方の整数を表すことができます。これらの文字列の最大長は1024文字です。 この問題の1つの解決策は、文字列を数値に変換し、これとは別に比較することです。この問題の他の解決策はありますか?

1
using宣言でユーザー定義の変換テンプレートを参照することはできますか?
class Bから継承するクラスAでは、次のように、using宣言を使用してのメンバーAをB、さらにはテンプレートに含めることができます。 struct A { template <typename T> void foo(); }; struct B : private A { using A::foo; }; しかし、それは変換テンプレートに対して行うことができますか? struct A { template <typename T> operator T(); }; struct B : private A { using A::operator /* ??? */; }; テンプレートを名前で参照する方法はないようですが、間違っていることが判明するか、説明が必要です。

1
コンパイラは、暗黙的に宣言された仮想デストラクタの実装を単一の個別の翻訳単位に配置できますか?
次のコードはVisual Studio(2017と2019の両方で/permissive-)でコンパイルおよびリンクしますが、gccまたはでコンパイルしませんclang。 foo.h #include <memory> struct Base { virtual ~Base() = default; // (1) }; struct Foo : public Base { Foo(); // (2) struct Bar; std::unique_ptr<Bar> bar_; }; foo.cpp #include "foo.h" struct Foo::Bar {}; // (3) Foo::Foo() = default; main.cpp #include "foo.h" int main() { auto foo = std::make_unique<Foo>(); …

2
LLVMのExpected <T>がExpected <T> &&の2つのコンストラクターを実装するのはなぜですか?
Expected&lt;T&gt;llvm / Support / Error.hに実装されています。a Tまたはのいずれかを保持するタグ付きユニオンErrorです。 Expected&lt;T&gt;タイプのテンプレートクラスTです: template &lt;class T&gt; class LLVM_NODISCARD Expected しかし、これらの2つのコンストラクターは本当に私を混乱させます: /// Move construct an Expected&lt;T&gt; value from an Expected&lt;OtherT&gt;, where OtherT /// must be convertible to T. template &lt;class OtherT&gt; Expected(Expected&lt;OtherT&gt; &amp;&amp;Other, typename std::enable_if&lt;std::is_convertible&lt;OtherT, T&gt;::value&gt;::type * = nullptr) { moveConstruct(std::move(Other)); } /// Move construct an Expected&lt;T&gt; …
8 c++  llvm 

3
struct tmはタイムゾーン情報をデータメンバーとして保存しますか
次のC ++コードを検討してください。 #include &lt;ctime&gt; #include &lt;iostream&gt; int main() { std::time_t now = std::time(nullptr); struct tm local = *std::localtime(&amp;now); struct tm gm = *std::gmtime(&amp;now); char str[20]; std::strftime(str, 20, "%Z", &amp;local); std::cout &lt;&lt; str &lt;&lt; std::endl; // HKT std::strftime(str, 20, "%Z", &amp;gm); std::cout &lt;&lt; str &lt;&lt; std::endl; // UTC return 0; } …
8 c++  c  ctime  time.h 

3
C ++で1 << 2と1 << 3を合計したときの奇妙な出力
したがって、私はC ++で少し操作を試みただけです。これが私が試したものです: int a = 1&lt;&lt;2; cout&lt;&lt;a; これは出力をとして与えます4。 int a = 1&lt;&lt;3; cout&lt;&lt;a; これは出力を次のように与えます 8 しかし、私がするとき: int a = 1&lt;&lt;2 + 1&lt;&lt;3; cout&lt;&lt;a; それはとして出力を与えます64。なんでそうなの? 私も試しました: int a = 1&lt;&lt;2; int b = 1&lt;&lt;3; cout&lt;&lt;a + b; 12期待どおりに出力が得られます。

2
非原子型に対してstd :: atomic_refはどのように実装されていますか?
次のプロパティを適用するのはかなり難しいように思われるので、非アトミックオブジェクトに対してどのようにstd::atomic_ref効率的に(std::mutexオブジェクトごとに1 つ)実装できるのかと思います。 atomic_refを介してオブジェクトに適用されるアトミック操作は、同じオブジェクトを参照する他のatomic_refを介して適用されるアトミック操作に対してアトミックです。 特に、次のコード: void set(std::vector&lt;Big&gt; &amp;objs, size_t i, const Big &amp;val) { std::atomic_ref RefI{objs[i]}; RefI.store(val); } 同じタイプのすべてのオブジェクトによって共有される大きなマスターロックでない限りstd::atomic_ref、同じものを毎回選択する必要があるため、実装は非常に難しいようstd::mutexです。 何か不足していますか?または、各オブジェクトは実装std::atomic_refを担当するため、アトミックであるか、std::mutex?

1
関数を引数として別の関数に渡すさまざまな方法の違いは何ですか?
1つの関数がいくつかの可能な関数の1つを呼び出す状況があります。これは、関数をパラメーターとして渡すのに適した場所のようです。ZubkovによるこのQuoaraの回答では、これを行う3つの方法があります。 int g(int x(int)) { return x(1); } int g(int (*x)(int)) { return x(1); } int g(int (&amp;x)(int)) { return x(1); } ... int f(int n) { return n*2; } g(f); // all three g's above work the same いつどの方法を使用する必要がありますか?違いは何ですか?私は最も単純なアプローチを好むので、なぜ最初の方法が常に使用されるべきではないのですか? 私の状況では、関数は1回だけ呼び出されますが、簡単にしたいと思います。私はそれをポインタ渡しで使用していて、最後に呼び出される関数がg(myFunc)どこにmyFuncあるかを呼び出すだけです。

2
Cマクロの標準準拠
私はここにこの小さな宝石を持っています(C-FAQからシャムレスに盗まれたアイデア): /* A lot of checks omitted to get rid of the architectures with a "weird" endianness */ /*...*/ #define MP_ENDIANESS ( (0x41424344ul == *(uint32_t*)"ABCD") ? MP_BIG_ENDIAN : MP_LITTLE_ENDIAN ) それは新しい現在の標準(この質問が尋ねられたときのC-18)に準拠しているか(未定義の動作ではありません)、準拠している場合は、古いバージョンのどれもそれをサポートしていますか? また、標準に準拠したC ++ですか?(はい、知っていますstd::endian)
8 c++  c 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.