C++基础语法简单介绍(一)
C++基础语法简单介绍(一)
1.C++ 版本历史
作者: Bjarne Stroustrup
版本 | 发布时间 | 主要特性 |
---|---|---|
C with Classes | 1979 | 引入面向对象基本特性,包括 Class、构造函数、析构函数等 |
C++ | 198 | 函数重载、运算符重载、多态、模板、命名空间 |
C++98 | 1998 | 标准化阶段开始,引入 STL |
C++0 | 200 | 修复 C++98 的缺陷 |
C++11 | 2011 | 现代C++阶段开始,引入自动类型推导、Lambda 表达式、右值引用、智能指针等 |
C++14 | 2014 | 泛型 Lambda 表达式、返回类型推导、二进制字面量等 |
C++17 | 2017 | 结构化绑定、std::optional、并行算法等 |
C++20 | 2020 | 概念、范围库、协程、std::format 等 |
C++2 | 202 | 模块化标准库、std::expected、std::mdspan 等 |
C with classes
泛型
其他语法特性
2.C和C++的区别
1. 函数原型
C 代码:C 允许省略函数原型中的参数类型。
C++ 代码:C++ 要求函数必须有完整的原型声明。
C++11 不是 C 的严格超集:尽管 C++11 兼容大多数 C 代码,但由于语法、关键字和类型系统的差异,并非所有 C 代码都能直接在 C++11 中编译。
代码语言:cpp代码运行次数:0运行复制// 在 C 语言中
void foo(); // 表示:"foo 是一个函数,可以接受任意数量和类型的参数"
// 在C++中
void foo(); // 表示:"foo 是一个函数,不接受任何参数"
void foo(void);// 表示:"foo 是一个函数,不接受任何参数"
//如果 C 代码中省略了参数类型,C++ 编译器会报错:
void foo(); // C 代码
foo(10); // C 中合法,C++ 中报错
2.类型转换
C 代码:C 允许隐式类型转换(如 void* 到其他指针类型)。
C++ 代码:C++ 要求显式类型转换。
代码语言:cpp代码运行次数:0运行复制// C 代码
void* ptr = malloc(10); // 不需要显式类型转换
// C++ 代码
void* ptr = malloc(10); // 需要显式类型转换
如果 C 代码中没有显式类型转换,C++ 编译器会报错:
// C 中合法,C++ 中报错
int* ptr = malloc(10);
. 关键字冲突
C 代码:C 中没有 C++ 的关键字(如 class、new、delete 等)。
C++ 代码:C++ 引入了新的关键字,这些关键字在 C 中可能被用作标识符。
代码语言:cpp代码运行次数:0运行复制示例:
c
复制
// C 代码
int class = 10; // class 是合法的标识符
// C++ 代码
int class = 10; // 错误:class 是关键字
如果 C 代码中使用了 C++ 的关键字作为标识符,C++ 编译器会报错:
int new = 10; // C 中合法,C++ 中报错
4.布尔类型
C 代码:C 需要包含 <stdbool.h> 才能使用 bool 类型。
C++ 代码:C++ 有内置的 bool 类型。
代码语言:cpp代码运行次数:0运行复制// C 代码
#include <stdbool.h>
bool flag = true;
// C++ 代码
bool flag = true; // 不需要额外头文件
5.枚举类型
C 代码:C 中的枚举类型可以隐式转换为整数。
C++ 代码:C++ 中的枚举类型是强类型的,不能隐式转换为整数。
代码语言:cpp代码运行次数:0运行复制enum Color { RED, GREE, BLUE };
int x = RED; // C 中合法,C++ 中报错
6.函数重载
C 代码:C 不支持函数重载。
C++ 代码:C++ 支持函数重载。
代码语言:cpp代码运行次数:0运行复制void print(int x) {}
void print(double x) {} // C 中报错,C++ 中合法
7. 结构体声明
C 代码:C 中声明结构体变量时需要 struct 关键字。
C++ 代码:C++ 中可以直接使用结构体名称。
代码语言:cpp代码运行次数:0运行复制// C 代码
struct Point { int x, y; };
struct Point p1; // 需要 struct 关键字
// C++ 代码
struct Point { int x, y; };
Point p1; // 不需要 struct 关键字
8.字符串字面量
C 代码:C 中的字符串字面量是 char* 类型。
C++ 代码:C++ 中的字符串字面量是 ct char* 类型。
代码语言:cpp代码运行次数:0运行复制// C 代码
char* str = "Hello"; // 合法
// C++ 代码
ct char* str = "Hello"; // 合法
char* str = "Hello"; // 错误:不能将 ct char* 赋值给 char*
9.隐式函数声明
C 代码:C 允许隐式函数声明(即未声明直接使用函数)。
C++ 代码:C++ 要求函数必须先声明后使用。
代码语言:cpp代码运行次数:0运行复制int main() {
foo(); // C 中合法,C++ 中报错
return 0;
}
void foo() {
printf("Hello\n");
}
代码语言:cpp代码运行次数:0运行复制
2.源文件和头文件管理
可以使用.hpp和.cpp, , .cxx作为头文件和源文件后缀
支持#pragma once宏防止头文件被重复包含
对于标准库,可以使用#include <iostream> 这种不带.h的方式
对于C的标准库,可以使用#include <cstdio> // C++ 的 stdio.
存在命名空间,例如using namespace xxx
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 8 条评论) |
本站网友 杨家群租房 | 22分钟前 发表 |
std | |
本站网友 会声会影安装序列号 | 28分钟前 发表 |
可以接受任意数量和类型的参数" // 在C++中 void foo(); // 表示:"foo 是一个函数 | |
本站网友 搜霸 | 18分钟前 发表 |
模板 | |
本站网友 重庆市人大主任 | 29分钟前 发表 |
范围库 | |
本站网友 羟基氧化钴 | 18分钟前 发表 |
Bjarne Stroustrup版本发布时间主要特性C with Classes 1979引入面向对象基本特性 | |
本站网友 嫦娥妹妹 | 27分钟前 发表 |
返回类型推导 | |
本站网友 临沂在线房产网 | 14分钟前 发表 |
C++ 中合法7. 结构体声明C 代码:C 中声明结构体变量时需要 struct 关键字 |