constexpr函数
常量表达式
举例
constexpr int get_size(){return 10;}
constexpr int foo = get_size();
//这是可行的,因为在编译时便可得出get_size()值是常量10,所以常量foo可被赋值
initializer_list
声明
initializer_list<string> ls;
注意:其中的元素的值永远是常量,所以无法改变
函数参数的默认值
int add(int x = 5,int y = 6)
int Main()
{
}
int add(int x = 5,int y = 6)//错误,因为原型已经指定默认值了
{
return x + y;
}
使用规则:
1.默认值的参数必须靠右,如(无,无,无,默,默,默),有一条无形的分界线将参数列表一分为二,若为(无,默,无)这种情况不能一分为二,则错误
2.如果一个函数有原型,且原型在函数之前,则应该在原型中定义
内联函数
函数的调用也是有开销的,如果函数本身很简单,但是在代码中复用率很高,为了满足代码的优雅与性能,可使用内联函数。
在编译的阶段,编译器会将被调用的内联函数直接代替函数表达式,以避免简单的函数被调用浪费性能。
注意:
- 定义在前,调用在后
- 若有循环或switch等复杂结构,可能会被编译器认为是个普通函数,所以内联函数必须不能复杂
函数的重载
自变量:函数的类型和个数
因变量:函数体,返回值及返回值类型
注意:
函数的类型不分传值和引用,所以int和int&对编译器来说是一样的,无法对其有效区分
类与对象
- 析构函数-删除对象,释放资源
- 类
class Clock
{
public:
void setTime(int newH = 0, int newM = 0, int newS = 0);
void showTime()
{
cout << hour << ":" << minute << ":" << second << endl;
}
private:
int hour, minute, second;
};
void Clock::setTime(int newH, int newM, int newS)
{
hour = newH;
minute = newM;
second = newS;
}
int main()
{
Clock clock;
clock.setTime(8, 30, 30);
clock.showTime();
//8:30:30
}
- 不需要new();
- 可以把方法先在内部写原型,然后写在类的外部
构造函数
public:
Clock(int newH = 0, int newM = 0, int newS = 0);
-----------------------------
int Main()
{
Clock Clock(H,M,S);
}