[解決済み] if constexpr()」と「if()」の違い。
2022-03-06 12:48:59
質問
とはどのような違いがあるのでしょうか?
if constexpr()
と
if()
?
その両方はいつどこで使えるのですか?
解決方法は?
唯一の違いは
if constexpr
はコンパイル時に評価されるのに対し
if
はありません。つまり、分岐はコンパイル時に拒否される可能性があり、その結果、コンパイルされることはないのです。
ある関数があるとします。
length
を持つ型の長さを返すものです。
.length()
関数を使用します。一つの関数でやると、コンパイラから文句を言われます。
template<typename T>
auto length(const T& value) noexcept {
if (std::integral<T>::value) { // is number
return value;
else
return value.length();
}
int main() noexcept {
int a = 5;
std::string b = "foo";
std::cout << length(a) << ' ' << length(b) << '\n'; // doesn't compile
}
エラーメッセージを表示します。
main.cpp: In instantiation of 'auto length(const T&) [with T = int]':
main.cpp:16:26: required from here
main.cpp:9:16: error: request for member 'length' in 'val', which is of non-class type 'const int'
return val.length();
~~~~^~~~~~
それは、コンパイラがインスタンス化するときに
length
というように、この関数は次のようになります。
auto length(const int& value) noexcept {
if (std::is_integral<int>::value) { // is number
return value;
else
return value.length();
}
value
は
int
を持たないので
length
メンバ関数があるため、コンパイラが文句を言うのです。コンパイラは、このステートメントが決して
int
しかし、コンパイラはそれを保証することはできないので、問題ではない。
これで
length
しかし、多くの型(この場合、すべての数値とクラスが
length
if constexpr
if
関連
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] constexpr` と `const` の相違点
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み] テスト
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件