C ++11重要特性详解

1.auto关键字

语法:auto declarator initializer;

作用:在变量声明并初始化时自动推导类型,可提高编码效率

适用场合:替换书写复杂的声明,比如声明迭代器

使用举例:

	vector<int> v1;
	//用auto可简化声明迭代器
	//老写法:vector<int>::iterator it = v1.begin();
	auto it = v1.begin(); 

2.decltype关键字

语法:decltype( expression )

作用:推导表达式的类型,提高代码可读性

适用场合:1.简化长类型变量的声明  2.宏定义 3.用于模板 4.获取不确定变量的类型

使用举例:

typedef decltype(NULL)		TYPE_OF_NULL;

3.返回类型后置语法

语法:

auto function_name(params) -> decltype (expression)

    function_body
};

作用:解决函数返回值类型依赖于参数,所导致的难以确定返回值类型的问题

适用场合:定义模板函数时,返回值类型依赖模板的参数

使用举例:

template<typename A, typename B>
auto add(A a, B b) -> decltype(a + b)
{
	return a + b;//使用模板时返回类型难以确定,返回类型后置语法可以解决这类问题
}

4.模板别名

语法:using new_type = old_type

作用:1.提高代码可读性 2.提高编码效率

适用场合:1.需要用typedef的情况 2.对参数较多的模板,传入默认参数

使用举例:

using uintType = unsigned int;//等价于typedef unsigned int uintType;
uintType a = 3;

template<typename T>
using int_map = map<int, T>;//这种格式用template定义的叫做模板别名,既不是函数模板也不是类模板
int_map<double> map1;//等价于map<int,double> map1;

5.列表初始化

语法:变量名 {初始化值} 或 变量名 = {初始化值}

作用:

1.提供一种统一的形式,可以对内置类型,结构体,数组,对象,容器等进行初始化

2.防止类型收窄(类型收窄:导致数据内容发生变化或精度丢失的隐式类型转换,出现类型收窄时编译会报错)

适用场合:所有需要初始化的地方

使用举例:

class Person
{
public:
	int age;
	Person(int _age)
	{
		age = _age;
	}
};
int main()
{
	int a { 10 };
	int array[]{ 1,3,5 };	
	vector<int> v1{ 2,4,6 };
	Person p1{ 99.5 };//报错:从“double”转换到“int”需要收缩转换
	int b{ 2.8 }; //报错:从“double”转换到“int”需要收缩转换
}

6.基于范围的for循环

语法:for ( for-range-declaration : expression ) {statement}

for-range-declaration :声明一个变量代表容器中的元素

expression :容器名称

作用:简化循环写法,提高编码效率

说明:1.冒号前面的局部变量声明只要求能够支持容器类型的隐式转换

           2.迭代时修改容器可能会导致一些意料之外的结果,良好的习惯是不要在迭代过程中修改迭代的容器

适用场合:需要从头到尾遍历容器时

不适用场合:1.只需要遍历容器的局部范围

                      2.循环语句运算和下标索引有关

使用举例:case1

	int arr[] { 10,20,30 };
	for (int i : arr)
	{
		cout << i << endl;//输出10,20,30
	}
	vector<int> vec { 1, 3, 5 };
	for (auto i : vec)
	{
		cout << i << endl;//输出1,3,5
	}

只读容器的写法,声明的容器元素可以用auto自动推导其类型

case2

	int arr[] { 10,20,30 };
	for (int i : arr)
	{
		i++;
		cout << i << endl;//输出11,21,31
	}
	for (int i=0;i<=2;i++)
	{
		cout << arr[i] << endl;//输出10,20,30
	}

从结果上来开,在范围for循环体内对容器中元素的值修改后,并没有改变元素本身。因为冒号前面的变量本质是地址不同于容器元素的一个局部变量,其值等于每次遍历时元素的值

case3

	int arr[] { 10,20,30 };
	for (int &i : arr)
	{
		i++;
		cout << i << endl;//输出11,21,31
	}
	for (int i=0;i<=2;i++)
	{
		cout << arr[i] << endl;//输出11,21,31
	}

若要在for循环体内修改元素的值,需要通过引用声明冒号前面的变量,这样每次循环时该引用代表元素本身。

适用场合:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
孙鑫vc是一种特殊的混合编程语言,它结合了C语言和Verilog语言的特点。在深入详解孙鑫vc代码之前,我们先了解一下它的一些特性。 首先,孙鑫vc具有高度的可定制性。用户可以根据自己的需求选择C语言和Verilog语言中的特性来编写代码。这种灵活性使得孙鑫vc可以适用于不同的应用领域。 其次,孙鑫vc支持并行计算。它提供了一种简单而有效的方式来利用硬件资源进行并行计算,提高程序的执行效率。 另外,孙鑫vc还具有强大的调试功能。它能够在运行时对代码进行监控和调试,帮助开发者快速定位问题并进行修复。 深入详解孙鑫vc代码包括以下几个方面: 首先,我们可以从代码的结构和组织方式入手。孙鑫vc代码一般由多个模块组成,每个模块包含了各自的功能和接口。 其次,我们需要了解代码中使用的变量和数据类型。在孙鑫vc中,可以使用C语言和Verilog语言中的数据类型,如整型、浮点型等。了解这些数据类型的使用方法和限制对理解代码非常重要。 然后,我们需要分析代码中的控制流和算法。这包括了代码中的条件语句、循环语句等,以及算法的实现细节。通过对控制流和算法的分析,我们可以更好地理解代码的逻辑和实现原理。 最后,我们还需要关注代码中的接口和数据传输方式。在孙鑫vc中,模块之间通过接口进行数据的传递和交互。了解接口的定义和使用方式对于理解代码的功能和模块之间的关系非常重要。 综上所述,深入详解孙鑫vc代码需要从代码的结构和组织方式、变量和数据类型、控制流和算法、接口和数据传输方式等多个方面进行分析和理解。通过对这些方面的研究,我们可以更好地理解孙鑫vc代码,并且能够对代码进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ellis1970

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值