2021-01-09

constexpr函数

常量表达式
举例


constexpr int get_size(){return 10;}

constexpr int foo = get_size();
//这是可行的,因为在编译时便可得出get_size()值是常量10,所以常量foo可被赋值

initializer_list

声明

initializer_list 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);
}

你可能感兴趣的:(2021-01-09)