2017-05-13 10 views
0

+または-のような演算子はどこに定義されていますか?組み込み演算子はどこに定義されていますか?

E.G. +というコードは、2つのアイテムをまとめて追加するという意味のコードはどこにありますか?

thisで読んでいましたが、標準ライブラリセクションの基本1 + 1 = 2ケースを見てはいけません。これの例は「Additive Operators」セクションに示されていますが、関数定義の場所を見つけることはできません。

+1

_ "「+」は2つのアイテムをまとめて追加することを意味するコードはどこに表示されますか?」_放出されたアセンブリコード。実際にあなたが尋ねていることは不明です。 –

+4

これは基本的な操作です。どのように定義されるのでしょうか?タートルズは一番下にありますか? – harold

+0

@Harold演算子に 'operator +'をオーバーロードする必要があると思ったと思います。 "基底"演算子+は左と右の値を加えた関数を持っていると想像してください。 –

答えて

3

コンパイラは、これらの操作のコードを生成します。これらの操作は、標準ライブラリの一部ではありません。コンパイラには、生成されたアセンブリ言語コードを調べるオプションがほとんどあります。

+0

これはコンパイラによって機械命令に行うことができます。必ずしも基本的な算術演算を定義する必要はありませんか? –

+0

@pasta基本的な算術演算の動作は、コンパイラのコードで定義されています。 –

+0

演算子のオーバーロード時に 'operator'構文と同じですか?私は、標準ライブラリにいくつかの 'operator +'が定義されていることを知っていますが、コンパイラが "演算子"とそれに続くASCII値のシーケンスを見たときに、 "演算子"という用語がどこに定義されていますか? –

0

これは言語自体の一部です。コンパイラは、文字列 "c = a + b;"を翻訳します。 bに格納されている値にaに格納されている値を加算し、その結果をcに設定します。

0

まだ、私は関数定義の場所を見つけることができません。

は全く関数定義、単純なアセンブリ命令セットがあるではないかもしれません:C++で

mov 1,r1 
mov 5,r2 
add r1,r2 
0

、何operator+(int,int)はありません。加算演算子は組み込みであり、それに対応する関数はありません。特に、あなたはこれを行うことはできません。

using intDyadic = int(*)(int, int); 
intDyadic add = operator+(int,int); 

は対照的に、あなたは標準ライブラリを含むライブラリで定義されたオペレータのオーバーライドへの関数ポインタを作成することができます。

+0

"組み込み"が何を意味するのかを判断しようとしていたと思います。それはどこかでコード化されなければなりません!そして明らかにどこかにコンパイラコードがあります。 –

+0

@pasta_sauce:これは実装に大きく依存します。浮動小数点ユニットを持たない最小限のハードウェアでの実装には、おそらく浮動小数点演算をエミュレートするライブラリが含まれているため、コンパイラによって生成されたコードにはこれらの関数への呼び出しが含まれます。そのため、関数が存在する可能性があり、ランタイムライブラリの一部である可能性があります(標準C++の他の部分は通常、プログラムにリンクされたライブラリを通じて実装されます)。 – rici

関連する問題