C++学习日常——little tips

C++学习日常——little tips

  • 关于类的构造函数

单参数的构造函数,应该加上explicit关键字,防止隐式转换。

#include <iostream>

using namespace std;
class myString {
public:
    myString(size_t size) { //单参数构造函数  正确写法:explicit myString (size_t size){
        _size = size;
        _ptr = (char *)malloc(size + 1);
    }
    int getSize(){
        return _size;
    }
    // explicit myString(size_t size, char* ptr = (char*)malloc(10)){ //除第一个参数外,其余参数有默认值的构造函数
    //     _size = size;
    // }
private:
    int _size;
    char *_ptr;
};

int main() {
    myString str1(20);  //合法,匹配第一个构造函数,为str1分配20字节内存
    myString str2 = 10; //本该不合法,但发生隐式转换,为str2分配10字节内存
    cout << str1.getSize() << endl;  //20
    cout << str2.getSize() << endl;  //10
}

为阻止本不合法的myString str2 = 10这样的实例化操作,应在只有单参数和只有单参数无默认值的构造函数前加explicit关键字,取消构造函数隐式转换。explicit myString(size_t size){...}

  • 关于const的问题

    • 在确定函数不应改变或重新赋值类内成员时,应在成员函数后加上const关键字

    • const为左结合

      例:

      A:int const * p = &a;

      B:const int * p = &a;

      C:int * const p = &a;

      AB含义相同,都声明一个指向常量整型的指针;而C声明一个指向整型的常量指针。

    • 模板相关:const和constexpr

      主要作用:用编译时间换取运行时间。编译器使得符合条件的表达式在编译时就获得该有的常量

      image-20210424142425023

posted @ 2021-04-23 20:38  bear-Zhao  阅读(50)  评论(0编辑  收藏  举报