美文网首页
NDK-027: C++08: const关键字增强和引用的本质

NDK-027: C++08: const关键字增强和引用的本质

作者: xqiiitan | 来源:发表于2025-01-13 16:15 被阅读0次

27.C++进阶1 - Const关键字增强和引用的本质剖析

1.string字符串常见操作。

#include <iostream>
using namespace std;
#include <string>

void main() {
    string str("12345678"); 
    cout << str.c_str() << endl;
    //1.字符串的遍历,越界会抛异常。
    for(int i=0; i<str.length(); i++) {
        cout << str[i]<< endl;
    }
    // 迭代器遍历字符串。
    for(string ::interator it=str.begin(); i<str.end(); it++) {
        cout << *it << endl;
    }
    // at方法遍历,会导致程序 宕机 
    for(int i=0; i<str.length(); i++) {
        cout << str.at(i) << endl;
    }   
}
#include <algorithm> // STL算法包
#include <cctype>    // 函数指针,大小写转换的回调函数
void main{
    // 2.添加
    string str1 = "123";
    str1.append("456");
    // 3.删除:参数1从哪里开始;参数2 删除几个(默认到字符串结尾);
    string str1 = "123 abc 123 abc 123";
    str1.erase(3 ); // 只剩下123
    // 3.2迭代器删除: 2 bc 123 abc 123. 删掉一个后,都会从头开始计算位置。
    for(string::interator it=str.begin(); i<str.begin()+3; it++) {
        str.erase(it);
    }
    cout << str1.c_str() << endl; // 2 bc 123 abc 123
    // 4.替换,参数1:从哪里开始,参数2:替换几个,参数3:替换成谁
    str1.replace(0,3,"1234"); // 1234 abc 123 abc 123
    // 5.查找,查不到返回-1,    rfind()从后往前查
    int pos = str1.find("abc", 0);  
    // 6.大小写转换
    string str3 = "AAA abc BBB abc 123";
    // 转化为大写
    transform(str3.begin(), str3.end(), str3.begin(), toupper);
    // 转化为小写
    transform(str3.begin(), str3.end(), str3.begin(), ::tolower);
}

2. c/c++ 编译器,编译链接运行的概念。

有些代码在不同的环境下,可能结果不一样。
有的c中不能编译,但是c++能编译。
c++ 很多默认情况下,就自带有register增强。
不同编译版本和环境,会导致不同的编译结果。
不同的平台运行同样的代码,也会有不同的效果。

  • 实用性增强; 变量声明要统一放一起。
  • register增强; 寄存器上面的变量,不能取地址&。 register加快程序速度。
  • 参数处理增强;
  • 检测增强。

3. const关键字加强

  • 修饰变量,不可改变
    const int number = 100;
  • 修饰指针:常量指针、指针常量
    int number ;
    const int *n_p = &number; // 常量指针:不能改变值
    int * const n_p = &number; // 指针常量:不能改变地址
    拷贝构造函数,一般带const;
    运算符重载、方法后面带,都是由于它的成员不可改变,所以带const关键字,防止被修改。
    void print() const {...} // 不能修改函数中的变量的值。

c/c++的区别:

c里面const是一个伪命题,可以通过指针去操作。只是一个编译时期的检测,运行时没被const做任何处理。
C++里面,不光在编译期做处理,还在运行时做处理。
C++用常量表保存起来,通过地址改的时候,改的是另外一块地址。而不是修改常量表中的内容。

4.引用的加强

好处:避免对象的拷贝;提高代码可读性,实现数据共享;避免指针悬挂问题;
提高代码调用效率;安全性提高。

引用的本质剖析:

引用本质 就是指针。

void change(int &number){ // 相当于change(int* number)
number=12; // 相当于 *number=12
}

void change(int &num1, int &num2){ // 传引用(或地址),交换值
    int temp = num1;
    num1 = num2;
    num2 = temp;
}
// 引用是一块内存地址的别名

void main() {
    int num1 = 10;
    int num2 = 20;
    change(num1, num2);
    cout << num1 << ","<< num2 << endl;
}

4.2 引用当左值和右值。vector集合。

Student-> string name;
class Student {
private: string name;
public: Student(string name) {this->name = name;}
public: 
    string& getName(){ // 传引用:可以通过getName修改name的值。
        return this->name;
    }
}
void main() {
    Student stu = Student("Darren");    
    stu.getName() = "jack"; // 默认不能修改,传引用可以修改。
    
    cout<< stu.getName().c_str() << endl;
}

vector 集合,front,back 能拿到内存的地址。

5.NDK异常处理

勾选fexceptions,用到C++异常体系需要加上(R5前是fno-exceptions)
// 加入编译的异常体系
externalNativeBuild/cmake/ cppFlags "-fexceptions"

指针* 要配合-> 访问下面的属性和方法。
拷贝构造函数
catch(Exception& e), 能避免多次创建对象。使用最多。
catch(Exception e) 会多次构造函数和析构函数。
catch(Exception*e) 创建的对象会被西沟,如果使用局部函数或者成员就会是一个野指针。
用指针需要delete 去释放。

相关文章

  • C++基础

    const关键字 const关键字标识常量,标明const右侧的变量(本质是常量)不可变。int const *b...

  • ES6(ES2015)标准

    1. const、let关键字 let块级作用域 const常量,引用类型可以改变属性 2. 函数 箭头函数=>:...

  • C++

    1, const 引用 const 引用是指向 const 对象的引用:const int ival = 1024...

  • 11、引用

    1、引用必须在定义的时候就初始化。指针不需要。 2、const引用必须引用const常量(文本和const修饰的变...

  • js 中声明常量关键字 var、let、const

    js 中声明常量的关键字:var、let、const,其中 let 和 const 是 ES6 中新增的关键字。 ...

  • C++中容易被忽略的基础知识

    const和define的区别C++中static关键字的总结C++中的构造函数及深拷贝浅拷贝c++基础之引用和指...

  • C++ 简易String类

    以下是C++实现的简易String类,需要注意和小心函数声明里面的参数类型(特别是引用和const关键字的使用!)

  • 【JS】从ECMA学习let、const、var变量声明与声明提

    let、const、var是JS中的声明关键字 let和const 我们熟知的let和const的特性,常见的就有...

  • Go入门7:常量 const

    const关键字 const variable type = value; 简单定义: const LENGTH ...

  • ES6新特性

    块作用域 let和const有关let 关键字(只在{}作用域内有用)const 关键字(常量也用于块即作用符 ...

网友评论

      本文标题:NDK-027: C++08: const关键字增强和引用的本质

      本文链接:https://www.haomeiwen.com/subject/ykadyjtx.html