当前位置: 首页 > article >正文

C++ 秋招查缺补漏

结构体和类的区别

C++ 中 class 和 struct 区别 | 编程指北 (csguide.cn)

C++ 中为了兼容 C 语言而保留了 C 语言的 struct 关键字,并且加以扩充了含义。

在 C 语言中,struct 只能包含成员变量,不能包含成员函数。

而在 C++ 中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数

区别:

  • class 中类中的成员默认都是 private 属性的。
  • 而在 struct 中结构体中的成员默认都是 public 属性的。
  • class 继承默认是 private 继承,而 struct 继承默认是 public 继承。
  • class 可以用于定义模板参数,struct 不能用于定义模板参数。
template <class T>
struct  Person {
public:
    T age;
};

sizeof 字符串时 要加上末尾的 ‘/0’

sizeof 和 strlen 的区别

sizeof 和 strlen | 编程指北 (csguide.cn)

 strlen 的源码:

size_t strlen(const char *str) {
    size_t length = 0;
    while (*str++)
        ++length;
    return length;
}

strlen 是一个 C 标准库中的函数,用于计算 C 风格字符串(以空字符 '\0' 结尾的字符数组)的长度,即不包括结尾的空字符的字符个数。

sizeof 是一个 C++ 编译期间计算的操作符,用于计算数据类型或对象所占用的字节数。

#include <iostream>

int main() {
    int a = 42;
    std::cout << "Size of int: " << sizeof(int) << std::endl;    // 输出 int 类型的大小
    std::cout << "Size of a: " << sizeof(a) << std::endl;        // 输出变量 a 的大小
    std::cout << "Size of double: " << sizeof(double) << std::endl; // 输出 double 类型的大小
}

数组做参数退化为指针

C/C++中数组做参数退化为指针 | 编程指北 (csguide.cn)

C++中的 const

C++ 中 const 关键字 | 编程指北 (csguide.cn)

const int ,并不是完全不能改变

int main() {
	const int a = 10;
	const int* p = &a;
	int* q  = const_cast<int*>(p);
	*q = 11;
	cout << *q;
}

//输出 11

但是输出 a 还是 10

计算机真是一门深不可测的学问.....

因为编译器可能会做一些优化!!也就是在你用到 const 变量的地方,编译器可能生成的代码直接就替换为常量的值,而不是访问一遍常量的指令。

所以即使更改了值,也是不起作用的

const int* p; // 指向只读变量的指针

int * const p; //指针本身只读

static

C++ 中 static 关键字 | 编程指北 (csguide.cn)

void foo() {
    static int count = 0;  // static 修饰局部变量
    count++;
    cout << count << endl;
}

int main() {
    foo();  // 输出 1
    foo();  // 输出 2
    foo();  // 输出 3
    return 0;
}

static 修饰局部变量可以使得变量在函数调用结束后不会被销毁,而是一直存在于内存中,下次调用该函数时可以继续使用。

同时,由于 static 修饰的局部变量的作用域仅限于函数内部,所以其他函数无法访问该变量。

static 修饰函数

static 修饰函数可以将函数的作用域限定在当前文件中,使得其他文件无法访问该函数。

同时,由于 static 修饰的函数只能在当前文件中被调用,因此可以避免命名冲突和代码重复定义。


http://www.kler.cn/news/339993.html

相关文章:

  • Mysql:数据库和表增删查改基本语句
  • cat用来查看文件内容、合并文件,或者将文件内容输出到终端
  • Qt QPushButton clicked信号浅析
  • 正则表达式-“三剑客”(grep、sed、awk)
  • LeetCode题练习与总结:单词规律--290
  • Java如何写一个构造函数
  • Python酷库之旅-第三方库Pandas(138)
  • 昇思MindSpore进阶教程--黑塞矩阵
  • C++ 算法学习——1.8 悬线法
  • 大数据新视界 --大数据大厂之数据质量评估指标与方法:提升数据可信度
  • C语言— exec系列函数
  • 《ASP.NET Web Forms 实现短视频点赞功能的完整示例》
  • 5.错误处理在存储过程中的重要性(5/10)
  • dns-prefetc 预解析
  • Unity3D游戏的内存控制详解
  • 跟我学C++中级篇——空值的定义
  • ansible常用的模块
  • 用伪代码Prompt让LLM进行图推理,生成更精准内容
  • MyBatis-Plus 之 typeHandler 的使用
  • 医院管理智能化:Spring Boot技术革新