35 C++ using 和 typedef 重新命名

本文介绍了typedef在C/C++中的使用,包括对基本类型和函数指针的重命名,以及C++11引入的using关键字在处理map中string键不同类型值的情况下的应用。
摘要由CSDN通过智能技术生成

typedef 重命名回顾

//typedef 在C 和 C++上的使用
typedef unsigned int int_yyy;// 给 unsigned int 重新命名为 int_yyy
typedef map<int, string> maps_i;//给 map<int, string> 重新命名为 maps_i
typedef void(*FUNCTYPE)(int);//定义一个函数指针类型。
typedef FUNCTYPE ttt;//给FUNCTYPE 这种类型重新命名为ttt

//现在的需求是:要在map中key 为string,但是value 是不确定的值,在C中的写法是要借助 模版类完成
template <typename T>
class teacher101 {
public:
	typedef map<string, T> ddd; //给 map<string,T> 这种类型 重新名为为ddd
};


void func100(int a) {
	cout << "func100 a  = " << a << endl;
}

void main(){
	cout << " typedef 在 C 和 C++中的使用举例 " << endl;
	int_yyy aaa = 10;
	maps_i bbb;
	bbb.insert({1,"nihao"});
	bbb.insert({2,"mnbnmlm"});
	ttt ccc = func100;
	ccc(898989);

//map 的使用
	teacher101<double>::ddd mapsiii;//teacher101<double>是作用域,ddd是类型, mapsiii是变量名
	mapsiii.insert({ "ss",98.9 });
	mapsiii.insert({ "ww",989090.9 });
//打印值验证
    cout << mapsiii["ss"] << endl;

}

using 重命名 study

//现在的需求是:要在map中key 为string,但是value 是不确定的值,在C中的写法是要借助 模版类完成
template <typename T>
class teacher101 {
public:
	typedef map<string, T> ddd; //给 map<string,T> 这种类型 重新名为为ddd
};

//C++11 using 解决方案
template <class T>
using str_map_t = map<double, T>;//str_map_t 为类型别名
//using的其他使用方法
using uiui = unsigned int ;
using maps_using = map<string, int>;

void main() {
	//使用
	str_map_t<int> aaa;
	aaa.insert({ 20.1,89 });
	aaa.insert({ 20.2,82229 });
	cout << "value =" << aaa[20.1] << endl;
	cout << "value =" << aaa[20.2] << endl;

	//使用
	uiui bbb = 9;
	maps_using mapsusing;
	mapsusing.insert({"aa",67});
	mapsusing.insert({"bb",90});
	cout << mapsusing["aa"] << endl;
	cout << mapsusing["bb"] << endl;
}

C++中,使用`using`和`typedef`都可以用来创建类型别名。它们的作用是相同的,都用于给现有的类型起一个别名。然而,`using`语句更加灵活、易读,并且提供了更多功能。 使用`using`语句创建类型别名更加直观和易读。例如,可以使用以下方式创建一个函数指针的别名: ```cpp using FP = void (*)(int, const std::string&); ``` 这比使用`typedef`语句更加清晰和简洁: ```cpp typedef void (*FP) (int, const std::string&); ``` 此外,`using`语句在定义泛型别名时更加方便。在`typedef`的情况下,需要将声明包装在结构中,而`using`语句不需要这样做。例如: ```cpp template<typename T> using Accounts = std::unordered_map<Student_ID, std::vector<T>>; ``` 而使用`typedef`的情况下需要这样声明: ```cpp template<typename T> struct Accounts { typedef std::unordered_map<Student_ID, std::vector<T>> type; }; ``` 总的来说,虽然`typedef`允许声明各种类型,如函数指针、数组指针等,但与C中的`using`语句相比,使用它的过程较为冗长和复杂。此外,`typedef`允许一次声明多个类型,这与`using`语句不同。因此,在C++中,更推荐使用`using`语句来创建类型别名。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++typedefusing](https://blog.csdn.net/youtiao_hulatang/article/details/104775111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [C++usingtypedef 的区别](https://blog.csdn.net/nnnnnnnnnmmmmm/article/details/126646221)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值