一些C++特性

  1. const和constexpr:
    const表示“只读”的含义。constexpr表示“常量”的含义。
    constexpr显式地声明函数或对象构造函数在编译期会成为常量表达式。constexpr函数可以在内部使用局部变量,循环和分支等简单语句。
int b = 5;
const a = b + 1;
constexpr c = b + 1;//报错
static_assert(a,"");//当第一个参数为常量表达式时才不会报错,a不是常量表达式。
  1. auto:
    auto可以用于函数地传参,函数返回类型推断。 auto不可用于数组类型地推断 decltype:可以用于表达式类型推断
if(std::is_same<decltype(x),int>::value)//判断类型是否相同的
{
}
//C++11后尾返回类型推导
template<typename T, typename U>
auto add1(T x, U y) -> decltype(x + y)
{
	return x + y;
}
//C++14后可以直接让普通函数具备返回值推导
template<typename T, typename U>
auto add2(T x, U y)
{
	return x + y;
}

decltype(auto)用于转发函数和封装返回值类型推导

string a() { string aa; return aa;};
string& b() { string bb; return bb;};
//C++11
string c()
{
	return a();
}
string& d()
{
	return b();
}

//C++14
decltype(auto) e()
{
	return a();
}
decltype(auto) f()
{
	return b();
}
  1. override和finall关键字
    重载(overload)函数名相同,函数签名不同,即有不同形参 重写(override)C++中指派生类覆盖基类的虚函数,当派生类重写虚函数时在后面加override检查是否符合重写规则。
class base {
	virtual void fun() {};
};
class derived :public base {
	virtual void fu()override { //不加不会报错
		cout << 666;
	};
};

隐藏(overwrite)是指基类成员函数,无论他是否为虚函数,当派生类出现同名函数时,如果派生类函数签名不同于基类函数,则基类函数会被隐藏。如果派生类的函数签名与基类相同,如果基类是虚函数,是重写,否则是隐藏。 finall

class base final{//下面会报错,修饰类,表示这个类不能继续被继承
	virtual void fun() {};
};
class derived :public base {//报错
	virtual void fun()final {//下面会报错,修饰虚函数表示不能继续被继承
		cout << 666;
	};
};
class derived2 : public derived {
	virtual void fun() {//报错

	}
};
  1. 显式禁用或采用编译器默认生成的函数
class c {
public:
	c() = default;//显示采用
	c& operator= (const c&) = delete;//显式禁用
};

int main()
{
	c cc1,cc2;
	cc2 = cc1;

	return 0;
}

alt 5. 强类型枚举 枚举类 enum class
枚举类实现了类型安全,首先他不能够被隐式地转换为整数,同时也不能与整数数字比较,也不能与不同的类型的枚举值比较。希望获得枚举值的值时,必须显式的进行类型转换

enum class new_enum :unsigned int {
	value1,
	value2,
	value3 = 100,
	value4 = 100
};
enum new_enum2{a,b,c,d};

int main()
{
	if (a < new_enum::value3) {//报错

	}
	if (a < 111)//不报错
	{

	}
	if (new_enum::value3 < new_enum::value4)//不报错
	{

	}
	//cout << new_enum::value3;//报错
	cout << a;//不报错
	cout << (int)(new_enum::value3);//不报错

	return 0;
}

6.lambda表达式:
7.函数对象包装器:
8. 右值引用,移动语义
9. 智能指针与内存管理
10. 并行与并发,互斥量与临界区,期值future,条件变量
11.杂项noexpect

全部评论

相关推荐

北枳的南橘:建议大家务必去和他沟通一下,像极了小学生对你侃侃而谈国际局势😂
找AI工作可以去哪些公司...
点赞 评论 收藏
分享
04-08 23:37
已编辑
东华大学 结构工程师
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务