C/C で見落とされがちな単項プラス演算子
C および C の単項プラス演算子 (
) は、よく誤解されます。 一見簡単に見えますが、オペランドに対して簡単ではない型変換が実行され、値とデータ型に重大な変更が生じる可能性があります。
一見すると、単項プラス演算子を適用しても何も起こらないように見えます。ただし、オペランドに対して標準の数学的変換が暗黙的に実行され、より広い整数型の値が生成される可能性があります。
具体的には、オペランドが標準の int
型よりビット幅が小さい符号なし整数の場合、単項プラス演算子はそれを符号付き整数に変換します。これにより、負の数を表現できるようになります。これは決定的な違いです。
この変換は一見些細なことのように見えますが、特定の状況では重要になることがあります。 単項プラス演算子を、単に正の数を示す視覚的な手がかりとして使用することは避けてください。その機能はさらに微妙です。
次の C の例を考えてみましょう:
<code class="language-c++">void foo(unsigned short x) { std::cout << typeid(+x).name() << std::endl; } int main() { unsigned short us = 10; foo(us); // Output will likely be something like "i" (for int) return 0; }</code>
このコードは、単項プラス演算子の型変換を示しています。出力は、 x
が int
型であることを示し、unsigned short
から signed int
への変換を示しています。
以上が単項プラス演算子は実際に C/C で何をするのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。