タグ付けされた質問 「auto」

`auto`キーワードは、推論された型のためにC ++ 11で再利用されました。初期化された変数宣言で型名を置き換えるために使用すると、変数には初期化子と同じ型が与えられます。戻り値の型として使用する場合、戻り値の型は末尾の戻り値の型として指定されるか、またはreturn-expressionから推定されます。

1
関数パラメーターのテンプレート引数プレースホルダーとしての「auto」
C ++ 20ではauto、関数パラメーター型を使用できます。 関数パラメーター型のautoテンプレート引数プレースホルダーとして使用することもできますか(似ていないが、C ++ 17 template <auto>の精神で)。 したがって、C ++ 20より前の次のコード: template<typename First, typename Second> void printPair(const std::pair<First, Second>& p) { std::cout << p.first << ", " << p.second; } 次のように書くことができます: void printPair(const std::pair<auto, auto>& p) { std::cout << p.first << ", " << p.second; } それはコンパイルし、概念の実験的なGCC実装でうまく動作します。 C ++ 20での正当な構文ですか?
22 c++  templates  auto  c++20 

6
C ++のオーバーロードされたコンストラクターによる不明な型の変数の初期化
主にpythonのバックグラウンドから来ているので、C ++で型を操作するのに多少苦労しました。 異なる型をパラメーターとして受け取るいくつかのオーバーロードされたコンストラクターの1つを介してクラス変数を初期化しようとしています。autoキーワードの使用は変数の自動宣言に使用できることを読みましたが、私の場合、コンストラクターが選択されるまで初期化されません。しかし、コンパイラーは初期化しないことに満足していませんvalue。 class Token { public: auto value; Token(int ivalue) { value = ivalue; } Token(float fvalue) { value = fvalue; } Token(std::string svalue) { value = svalue; } void printValue() { std::cout << "The token value is: " << value << std::endl; } }; Pythonでは、次のようになります。 class Token(): def …

1
std :: pair <auto、auto>戻り値の型
で遊んでいましautoたstd::pair。以下のコードでfは、関数はstd::pairテンプレートパラメータに依存するタイプのを返すことになっています。 実際の例: 例1 template &lt;unsigned S&gt; auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S == 2) return std::pair{1.0, 2.0}; // pair of doubles else return std::pair{0.0f, 0.0f}; // pair of floats } これは、gcc 9.2、gcc 10.0、clang 9.0およびclang 10.0で動作します。 次に、明確にするために戻り値の型を明示的に記述したいと思いstd::pairます。 例2 …

2
異なるC ++コンパイラ間での自動型の推測の不一致
だから、私はドット積を実装しようとしています( https://en.wikipedia.org/wiki/Dot_product)を最新のC ++のいくつかのフレーバーで、次のコードを考え出しました: #include &lt;iostream&gt; template&lt;class... Args&gt; 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&lt;Args...&gt;::type s = 0; while( i1 != v1.end() &amp;&amp; i2!= v2.end()) { …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.