C/C++ 三項演算子に関する興味深い観察

PHPz
リリース: 2023-09-15 19:29:02
転載
1156 人が閲覧しました

C/C++ 三項演算子に関する興味深い観察

if..else 句の代わりに三項演算子が実装されていることがわかります。 ?:で表されます。 「?」 ' 記号は if 部分に相当し、':' は else 部分に相当します。次の 3 つのプログラムは、三項演算子の場合の興味深い観察結果を説明しています。

次のプログラムはエラーなしでコンパイルされます。三項式の戻り値の型は float (exp2 など) であることが想定されており、exp3 (つまり、リテラルの 0 - int 型) は暗黙的に float に変換可能です。

#include <iostream>
using namespace std;
int main(){
   int test1 = 0;
   float fvalue = 3.111f;
   cout<< (test1 ? fvalue : 0) << endl;
   return 0;
}
ログイン後にコピー

コンパイラが三項式の戻り値の型を見つけられないか、exp2 (char 配列) と exp3 (int) の間に暗黙的な変換がないため、次のプログラムはコンパイルされません。

#include <iostream>
using namespace std;
int main(){
   int test1 = 0;
   cout<< test1 ? "A String" : 0 << endl;
   return 0;
}
ログイン後にコピー

次のプログラムはコンパイルできるかもしれませんが、実行すると失敗します。三項式の戻り値の型は (char *) 型に制限されていますが、式は int を返すため、プログラムは失敗します。文字通り、プログラムは実行時または実行時にアドレス 0 に文字列を出力しようとします。

#include <iostream>
using namespace std;
int main(){
   int test1 = 0;
   cout << (test1 ? "A String" : 0) << endl;
   return 0;
}
ログイン後にコピー
exp2 が出力型として扱われ、exp3 が実行時または実行時に exp2 に変換できることがわかります。変換が暗黙的であるとみなされる場合、コンパイラは 変換されたスタブを挿入します。変換が明示的な操作として扱われる場合、コンパイラはエラーをスローします。コンパイラがそのようなエラーを無視できる場合、プログラムは実行時または実行時に失敗する可能性があります。

以上がC/C++ 三項演算子に関する興味深い観察の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!