1. 程式人生 > >三目運算子在C和C++編譯器中的不同

三目運算子在C和C++編譯器中的不同

#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