C++基础语法总结

C++使用

  • C++的源文件扩展名是:cpp
  • C++程序的入口是main函数
  • C++完全兼容c语言的语法

1、cin、cout

  • C++中常使用cin、cout进行控制台的输入和输出
#include <iostream>
using namespace std;

int main() {
	cout << "hello world !!!" << endl;
	return 0;
}
  • cin用的是右移运算符 >> ,cout用的是左移运算符 <<
  • endl是换行的意思

2、函数重载(overload)

  • 规则

    • 函数名相同
    • 参数个数不同、参数类型不同、参数顺序不同
  • 注意

    • 返回值类型与函数重载无关
    • 调用函数时,实参的隐式类型转换可能会产生二义性
  • 本质

    • 采用了name mangling或者叫name decoration的技术
    • C++编译器默认会对符号名(比如函数名)进行改编、修饰、有些地方也叫做“命名倾轧”
    • 重载时会生成多个不同的函数名,不同编译器(MSVC、g++)有不同的生成规则
    • 通过IDA打开(VS_Release_禁止优化)可以看到

3、默认参数

  • C++允许函数设置默认参数,在调用时可以根据情况省略实参,规则如下:
    • 默认参数只能按照从右到左的顺序(即默认参数要写在参数列表的最后)
    • 如果函数同时有声明、实现,默认参数只能放在函数声明中
    • 默认参数的值可以是常量、全局符号(全局变量、函数名)
  • 如果函数的实参 经常是同一个值,可以考虑使用默认参数
#include <iostream>
using namespace std;
const int age = 33;

void test();

void display(int a, int b = 22, int c = 33, void (*func)() = test);

void test() {
	cout << "test()" << endl;
}

void display(int a, int b, int c, void (*func)()) {
	cout << "a is : " << a << endl;
	cout << "b is : " << b << endl;
	cout << "c is : " << c << endl;
	func();
}
int main() {
	display(11);
	return 0;
}
  • 函数重载、默认参数可能会产生冲突、二义性(建议优先选择默认参数)
    在这里插入图片描述

4、extern ‘‘C’’

  • 被extern ‘’C’’ 的代码会按照C语言的方式去编译
    在这里插入图片描述

  • 如果函数同时有声明和实现,要让函数声明被extern '‘C’'修饰,函数实现可以不修饰
    在这里插入图片描述

  • 由于C、C++编译规则不同,在C、C++混合开发时,可能会出现C++在调用C语言的API时,需要extern ‘‘C’’ 修饰C语言函数声明
    在这里插入图片描述

  • 有时也会在编写C语言代码中直接适用extern ‘‘C’’,这样就可以直接被C++调用
    在这里插入图片描述
    在这里插入图片描述

  • 通过使用宏 __cplusplus来区分C、C++环境

5、#pragma once

  • 我们经常使用#ifndef、#define、#endif来防止头文件的内容被重复包含
  • #pragma once可以防止整个文件的内容被重复包含
    • #ifndef、#define、#endif受C、C++标准的支持,不受编译器的任何限制
    • 有些编译器不支持#pragma once(较老的编译器不支持,如GCC3.4版本之前),兼容性不够好
    • #ifndef、#define、#endif可以针对一个文件中的部分代码,而#pragma once只能针对整个文件

6、内联函数(inline function)

  • 适用inline修饰函数声明或者实现,可以使其编程内联函数(建议声明和实现都添加inline修饰)
  • 特点
    • 编译器会将函数调用直接展开为函数代码
    • 可以减少函数调用的开销
    • 会增大代码体积
  • 注意
    • 尽量不要内联超过10行代码的函数
    • 有些函数即使声明为inline,也不一定会被编译器内联,比如递归函数
  • 内联函数与宏的区别
    • 内联函数和宏,都可以减少函数调用的开销
    • 对比宏,内联函数多了语法检测和函数特性

7、表达式

  • C++的有的表达式是可以被赋值的
    在这里插入图片描述

8、const

  • const是常量的意思,被修饰的变量不可修改
  • 如果修饰的是类、结构体(的指针),其成员也不可更改
    在这里插入图片描述
  • const修饰的是其右边的内容

9、引用

  • 在C语言中,适用指针可以间接获取、修改某个变量的值
  • 在C++中,适用引用可以起到跟指针类似的功能
    在这里插入图片描述
  • 注意点
    • 引用相当于变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用)
    • 对引用做计算,就是对引用所指向的变量做计算
    • 在定义的时候就必须初始化,一旦指向了某个变量,就不可以再改变,“从一而终”
    • 可以利用引用初始化另一个引用,相当于某个变量名的多个别名
    • 不存在引用的引用,纸箱引用的指针,引用数组
  • 引用存在的价值之一:比指针更安全、函数返回值可以被赋值
  • 引用的本质是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针
  • 一个引用占用一个指针的大小

10、常引用(Const reference)

  • 引用可以被const修饰,这样就无法通过引用来修改数据了,可以称为常引用
  • const 必须写在&符号的左边,才能算是常引用
  • const引用的特点
    • 可以指向临时数据(常量、表达式、函数返回值)
    • 可以指向不同类型的数据
  • 作为函数参数时(此规则也适用于const指针)
    • 可以接受const和非const实参(非const引用,只能接受非const实参)
    • 可以跟非const引用构成重载
  • 当常引用指向了不同类型的数据时,会产生临时变量,即引用指向的并不是初始化时的那个变量
  • 数组引用的两种常见写法
    在这里插入图片描述

11、常用的汇编

  • AT&T汇编 VS Intel汇编
    在这里插入图片描述
  • x64汇编寄存器
    在这里插入图片描述
    在这里插入图片描述
  • x64汇编常用指令
    在这里插入图片描述
    在这里插入图片描述

12、变量地址总结

  • 一个变量的地址,是它所有字节地址中的最小值
  • 24
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的C++应用程序开发框架,它提供了一系列的类和工具来帮助开发者创建图形用户界面(GUI)、网络应用程序和数据库应用程序等。在Qt中,我们可以使用C++语言来编写代码,并通过Qt提供的类和函数来实现各种功能。 在Qt中,我们可以使用结构体(struct)或类(class)来声明对象类型。使用struct声明对象类型时,成员变量和成员函数默认为public访问权限。而使用class声明对象类型时,成员变量和成员函数可以使用不同的访问权限修饰符(public、private和protected)进行限制。 例如,在使用struct实现时间对象实例的代码中,我们可以看到使用了struct关键字来声明Time结构体,并在结构体中定义了特征(变量)和功能(函数)。通过结构体对象可以访问成员函数来打印时间、设置时间和运行时间等操作。 而在使用class实现时间对象实例的代码中,我们可以看到使用了class关键字来声明Time类,并在类中定义了私有、受保护和公有成员变量和成员函数。通过类对象可以访问公有成员函数来打印时间,设置时间和获取小时等操作。 函数重载是指在同一个作用域内,允许有多个同名的函数,但它们的参数列表必须不同。通过函数重载,我们可以根据不同的参数类型和个数来选择合适的函数进行调用。在C语言中,函数重载是不支持的,而在C++中,函数重载是一种常用的特性。 在C++中,函数重载可以实现参数类型不同或参数个数不同的函数。例如,在代码中的函数重载示例中,函数add可以根据参数的类型(int或double)进行重载,从而实现了对不同类型的参数进行相加的功能。 总结起来,Qt是一个跨平台的C++应用程序开发框架,可以使用C++语言来编写代码,并通过Qt提供的类和函数来实现各种功能。在Qt中,可以使用struct或class来声明对象类型,并通过成员变量和成员函数来实现相应的功能。此外,C++还支持函数重载的特性,可以根据参数的类型和个数来选择合适的函数进行调用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [嵌入式QT基础-C++面向对象编程语法](https://blog.csdn.net/wprpr/article/details/108920306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [QT 基础语法](https://blog.csdn.net/qq_41256954/article/details/88851140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值