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

C ++ 14は2014年に承認されたC ++標準の名前です。これは以前のC ++ 11標準に基づいて構築されており、コア言語と標準ライブラリを改善し、いくつかの機能を追加しています。

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 

1
関数ポインターの配列から関数ポインターをテンプレート引数として渡す
関数ポインターの配列から関数ポインターをテンプレート引数として渡したいのですが。Intellisenseが何かがおかしいと文句を言うのに、私のコードはMSVCを使用してコンパイルしているようです。gccとclangはどちらもコードのコンパイルに失敗します。 次の例を考えてみます。 static void test() {} using FunctionPointer = void(*)(); static constexpr FunctionPointer functions[] = { test }; template <FunctionPointer function> static void wrapper_function() { function(); } int main() { test(); // OK functions[0](); // OK wrapper_function<test>(); // OK wrapper_function<functions[0]>(); // Error? } MSVCはコードをコンパイルしますが、Intellisenseは次のエラーを出します:invalid nontype template argument of type "const …
9 c++  templates  c++14 

3
C ++ 14でのInitキャプチャによるC ++ Lambdaコードの生成
特にC ++ 14で追加された一般化されたinitキャプチャで、キャプチャがラムダに渡されるときに生成されるコードコードを理解/明確化しようとしています。 以下にリストする以下のコードサンプルを提供してください。これは、コンパイラーが生成するものについての私の現在の理解です。 ケース1:値によるキャプチャ/デフォルトによる値によるキャプチャ int x = 6; auto lambda = [x]() { std::cout << x << std::endl; }; 次と等しい: class __some_compiler_generated_name { public: __some_compiler_generated_name(int x) : __x{x}{} void operator()() const { std::cout << __x << std::endl;} private: int __x; }; そのため、複数のコピーがあります。1つはコンストラクターパラメーターにコピーし、もう1つはメンバーにコピーします。これは、ベクターなどの型にはコストがかかります。 ケース2:参照によるキャプチャ/デフォルトの参照によるキャプチャ int x = 6; auto lambda …
9 c++  lambda  c++14  move 

2
sizeof sum構造体を空のパラメーターパックで機能させるには
渡されたすべてのタイプのサイズの合計を決定するためのこの可変構造があります: template <typename U, typename... T> struct TotalSizeOf : std::integral_constant<size_t, sizeof(U) + TotalSizeOf<T...>::value> {}; template <typename U> struct TotalSizeOf<U> : std::integral_constant<size_t, sizeof(U)> {}; 使用法: TotalSizeOf<double, int, char>::value 問題は、これを変更して、空のパラメーターパックで動作し、戻ることができるようにする方法です0。 例えば TotalSizeOf<>::value 現在、エラーが発生します error: wrong number of template arguments (0, should be at least 1) C ++ 14しか使用できません。
8 c++  c++14 

1
Swig C ++:インターフェースベクター<クラスオブジェクト*>
基本的に私はPythonで値の異なるデータ型の辞書(float / int / bool / char / list)を含むタプル/リストを作ろうとしています。 私はこれを次のコードから取得しています: (&lt;f_p.Bunch; proxy of &lt;Swig Object of type 'Bunch *' at 0x7f4954bdde10&gt; &gt;, &lt;f_p.Bunch; proxy of &lt;Swig Object of type 'Bunch *' at 0x7f4954bdde40&gt; &gt;, &lt;f_p.Bunch; proxy of &lt;Swig Object of type 'Bunch *' at 0x7f495668be70&gt; &gt;, &lt;f_p.Bunch; proxy of &lt;Swig …
8 c++  c++11  c++14  swig 

1
コンパイル時に解決されない文字列リテラルとの比較
私は最近、次のようなものを見つけました。 #include &lt;string&gt; // test if the extension is either .bar or .foo bool test_extension(const std::string&amp; ext) { return ext == ".bar" || ".foo"; // it obviously should be // return ext == ".bar" || ext == ".foo"; } 関数は明らかにコメントが示唆することを行いません。しかし、それはここでのポイントではありません。これはifステートメントで2つ以上のOR条件を使用できますか?あなたが関数を適切に書く方法を私は完全に知っているので! コンパイラがこのスニペットをどのように処理するのか疑問に思い始めました。私の最初の直感は、これがreturn true;基本的にコンパイルされるということでした。この例をgodboltに接続すると、GCC 9.2もclang 9も最適化でこの最適化を行わないことがわかりました-O2。 ただし、コードを1に変更する #include &lt;string&gt; using namespace std::string_literals; …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.