zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    JVM 关于对象分配在堆、栈、TLAB的理解
    分布式唯一 ID 生成方案有哪些?
    JVM 栈帧之操作数栈与局部变量表 转
    C# TreeHelper帮助类
    Java:Top K问题的解法
    C#单例模式
    C#分组方式比较
    Vue实现登录
    git使用总结
    js实现无色彩球
  • 原文地址:https://www.cnblogs.com/bear-Zhao/p/14695489.html
Copyright © 2011-2022 走看看