三目運算子在C和C++編譯器中的不同
阿新 • • 發佈:2018-12-21
#include <iostream> using namespace std; //在C語言中 表示式的結果 放在什麼地方 暫存器 //1 // 在C語言中, 表示式的返回值 是變數的值 // 在C++中, 表示式返回的是變數的本身 //2 如何做到的 //讓表示式返回一個記憶體空間 ..記憶體首地址 指標 //在C語言中 如何 實現 c++的效果 //3 本質 //c++編譯器 幫我們程式設計師完成了 取地址的工作 int main() { int a = 10; int b = 20; int var = 100; var = 101; //返回一個最小數 並且給最小數賦值成3 //三目運算子是一個表示式 ,表示式不可能做左值 (a < b ? a : b )= 30; //int z = (a < b ? a : b ); printf("a = %d, b = %d\n", a, b); system("pause"); return 0; }
在c語言中,三目運算子是不能直接當左值的,因為在c語言中,表示式返回的是一個值(數),在數是不能當左值的,而在C++中,三目運算子是可以當左值的,因為在C++編譯器中,三目運算子返回的是變數本身(即記憶體空間),而不是一個值,所以是可以當左值的。在C++中編譯器自動完成了對三目運算子的取地址命令,所以返回的是變數的本身。
注意:
1. c語言返回變數的值,而c++中返回的變數本身
c語言中的三目運算子返回的是變數值,不能作為左值使用
c++中的三目運算子可以直接返回變數本身,因此可以出現在程式的任何地方
2. 三目運算子可能返回的值中如果有一個是常量值,則不能作為左值使用,如:
(a<b?1:b)=30
3. c語言如何支援類似C++的特性呢?
當左值的條件是,要有記憶體空間:c++編譯器自動幫助程式設計師完成了取一個地址而已;
因此要讓c中的三目運算子當左值,只需要返回一個地址就可以了:
*(a<b?&a:&b)=30