[解決済み] 同じコードでもCodeBlockSとVisual Studioでは反応が違う
2022-03-01 01:20:40
質問
このコードをCodeBlocks(C++14使用)およびVisual Studio 2015でテストしてみました。
#include <iostream>
void sum(auto a, auto b)
{
std::cout << a + b;
}
int main()
{
sum(11, 5);
}
codeblocksでは、正常にコンパイルされ、16が出力されます。 Visual Studioでは、次のようなエラーが発生します。
Error C3533 a parameter cannot have a type that contains 'auto'
同じ言語なのに、なぜコンパイラの反応が違うのか、知りたかったのです。また、Visual Studioではタブを開いたままにするのにstd::cin.get()が必要ですが、Codeblocksではタブが勝手に閉じないのはなぜですか?
解決方法は?
ビジュアルスタジオとコードブロックの本当の違いは、ビジュアルスタジオは独自のvc++コンパイラを使用し、コードブロックはgccのWindowsへの移植であるmingw gccを使用していることです。
パラメータを
auto
は、関数を
汎用関数
これは、以前から提案されていたことですが、まだ標準化されていません。標準では、関数のパラメータとして auto を使うことは、ラムダ関数 (c++14, generic lambdas) でのみ許可されています。
しかし、gccでは、このサポートが追加されるのは時間の問題と考え、拡張機能として実装しています。Vc++は今のところこれを行なっていない。うまくいけば、c++20でこの機能を見ることができるかもしれません。
汎用関数は、基本的に、より冗長でない構文による関数テンプレートの略記法です。
関連
-
[解決済み] テスト
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】Enterキーを押して続行する
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] Visual Studioでディレクトリ構造全体を「既存の項目を追加」するにはどうすればよいですか?
-
[解決済み] Visual Studioでコマンドラインパラメータを使ったデバッグを行う
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】C++の余分な資格エラー
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】デバッグアサーションに失敗しました