前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >C++基础语法简单介绍(一) -- 概要

C++基础语法简单介绍(一) -- 概要

原创
作者头像
用户10859876
修改2025-01-15 13:22:32
修改2025-01-15 13:22:32
9200
代码可运行
举报
运行总次数:0
代码可运行

1.C++ 版本历史

C和C++的比较
C和C++的比较

作者: Bjarne Stroustrup

版本

发布时间

主要特性

C with Classes

1979

引入面向对象基本特性,包括 Class、构造函数、析构函数等

C++

1983

函数重载、运算符重载、多态、模板、命名空间

C++98

1998

标准化阶段开始,引入 STL

C++03

2003

修复 C++98 的缺陷

C++11

2011

现代C++阶段开始,引入自动类型推导、Lambda 表达式、右值引用、智能指针等

C++14

2014

泛型 Lambda 表达式、返回类型推导、二进制字面量等

C++17

2017

结构化绑定、std::optional、并行算法等

C++20

2020

概念、范围库、协程、std::format 等

C++23

2023

模块化标准库、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); 

3. 关键字冲突

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, GREEN, 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++ 中的字符串字面量是 const char* 类型。

代码语言:cpp
代码运行次数:0
复制
// C 代码
char* str = "Hello";  // 合法

// C++ 代码
const char* str = "Hello";  // 合法
char* str = "Hello";  // 错误:不能将 const 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, .cc, .cxx作为头文件和源文件后缀

支持#pragma once宏防止头文件被重复包含

对于标准库,可以使用#include <iostream> 这种不带.h的方式

对于C的标准库,可以使用#include <cstdio> // C++ 的 stdio.

存在命名空间,例如using namespace xxx

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.C++ 版本历史
  • 2.C和C++的区别
    • 1. 函数原型
    • 2.类型转换
    • 3. 关键字冲突
    • 4.布尔类型
    • 5.枚举类型
    • 6.函数重载
    • 7. 结构体声明
    • 8.字符串字面量
    • 9.隐式函数声明
  • 2.源文件和头文件管理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档