本文全面介绍了C++11的新特性和语法改进,涵盖了数据类型、变量、常量、枚举、运算符以及控制结构等内容。文章详细讲解了C++11中诸如智能指针和lambda表达式等高级语法特性,并提供了丰富的示例代码来帮助理解。通过本文的学习,读者可以快速掌握C++11语法入门知识,为更深入地使用C++11打下坚实的基础。
C++11简介C++11新特性概述
C++11是C++语言的一个重要版本,它引入了许多新的特性和改进。这些新特性主要集中在提高代码的可读性和简洁性,同时增强了语言的灵活性和表达能力。例如,C++11引入了新的语法结构(如lambda表达式和range-based for循环)、新的类型(如std::unique_ptr和std::shared_ptr)以及改进的库(如新的容器和算法)。
C++11与旧版本的区别
C++11在语法、库功能和内存管理方面与旧版本(如C++98和C++03)有许多不同之处。以下是一些主要的区别:
- 语法改进:C++11引入了更简洁的语法,例如自动类型推断(auto关键字)、初始化列表和lambda表达式。
- 库的增强:C++11的库更加丰富,包括新的STL容器(例如std::array、std::unordered_map)和算法。
- 内存管理改进:智能指针(std::unique_ptr、std::shared_ptr)的引入使得管理动态分配的内存更加安全和方便。
C++11的优势和应用场景
C++11的优势在于它在保留C++强大性能的同时,提供了更现代和方便的编程方式。C++11的智能指针和范围for循环等功能,使得程序更加安全和易于维护。C++11适用于各种场景,如高性能计算、游戏开发、操作系统内核和网页浏览器内核等。
基本语法入门数据类型和变量
在C++中,数据类型定义了变量存储的数据类型。C++支持多种基本数据类型,包括整型、浮点型、字符型等。以下是几种常见的基本数据类型:
int
:整型,通常占4个字节。float
:单精度浮点型,通常占4个字节。double
:双精度浮点型,通常占8个字节。char
:字符型,通常占1个字节。
变量定义时需要指定数据类型,并给变量命名。例如:
int age = 25;
float height = 1.75;
double weight = 68.5;
char grade = 'A';
常量和枚举
常量是不可修改的变量,通常用于定义程序中的固定值。在C++中,可以使用const
关键字定义常量:
const int MAX_VALUE = 100;
const float PI = 3.14159;
枚举(enum)是一种用户自定义的数据类型,用于定义一组命名的常量:
enum Color { RED, GREEN, BLUE };
Color myColor = RED;
运算符及其优先级
C++支持多种运算符,包括算术运算符(如+、-、*、/)、逻辑运算符(如&&、||)、关系运算符(如==、!=、<、>)等。运算符的优先级决定了表达式中的计算顺序。例如:
int result = 2 + 3 * 4; // 优先计算3 * 4,结果为14
result = (2 + 3) * 4; // 结果为20
控制结构
条件语句(if, switch)
条件语句用于根据不同的条件执行不同的代码块。if
语句是最基本的条件结构:
int num = 5;
if (num > 0) {
std::cout << "num is positive\n";
}
switch
语句用于比较多个值:
int choice = 2;
switch (choice) {
case 1:
std::cout << "Choice is 1\n";
break;
case 2:
std::cout << "Choice is 2\n";
break;
default:
std::cout << "Default choice\n";
}
循环语句(for, while, do-while)
循环语句用于重复执行一段代码直到满足某个条件为止。for
循环是最常用的形式:
for (int i = 0; i < 5; i++) {
std::cout << i << " ";
}
// 输出: 0 1 2 3 4
while
循环在条件为真时重复执行:
int i = 0;
while (i < 5) {
std::cout << i << " ";
i++;
}
// 输出: 0 1 2 3 4
do-while
循环在条件为真时至少执行一次:
int j = 0;
do {
std::cout << j << " ";
j++;
} while (j < 5);
// 输出: 0 1 2 3 4
跳转语句(break, continue)
跳转语句用于控制循环的执行流程。break
语句用于立即退出循环:
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
std::cout << i << " ";
}
// 输出: 0 1 2 3 4
continue
语句用于跳过当前循环的剩余部分,并继续下一次循环:
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
std::cout << i << " ";
}
// 输出: 1 3 5 7 9
函数和对象
函数定义和调用
函数是一段可以重复使用并可执行特定任务的代码块。定义函数时需要指定返回类型和函数名。以下是一个简单的函数示例:
int add(int a, int b) {
return a + b;
}
int result = add(3, 4);
std::cout << "Result: " << result << "\n";
函数重载
函数重载是指使用相同的函数名定义多个函数,这些函数的参数类型或数量不同。例如:
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int result1 = add(3, 4); // 调用int版本的add
double result2 = add(3.5, 4.5); // 调用double版本的add
类的定义和对象的创建
类是C++中用于定义对象的数据结构。类中可以包含成员变量和成员函数。以下是一个简单的类定义:
class Rectangle {
public:
int width;
int height;
void setDimensions(int w, int h) {
width = w;
height = h;
}
};
Rectangle myRect;
myRect.setDimensions(5, 10);
成员函数和构造函数
成员函数是属于类的方法,用于操作对象的数据。构造函数是一种特殊的成员函数,用于初始化对象。以下是一个类的完整定义,包含构造函数:
class Rectangle {
public:
int width;
int height;
Rectangle(int w, int h) {
width = w;
height = h;
}
void setDimensions(int w, int h) {
width = w;
height = h;
}
};
Rectangle myRect(5, 10);
高级语法特性
智能指针(unique_ptr, shared_ptr)
智能指针是C++11引入的一种自动内存管理机制。std::unique_ptr
和std::shared_ptr
是最常用的两种智能指针。以下给出了一个实际的使用案例:
#include <memory>
#include <iostream>
int main() {
std::unique_ptr<int> p1 = std::make_unique<int>(10);
std::shared_ptr<int> p2 = std::make_shared<int>(20);
std::cout << "Unique pointer value: " << *p1 << "\n";
std::cout << "Shared pointer value: " << *p2 << "\n";
return 0;
}
Lambda表达式
Lambda表达式是一种匿名函数,可以用于定义简单的函数。例如:
#include <iostream>
int main() {
auto add = [](int a, int b) {
return a + b;
};
int result = add(3, 4);
std::cout << "Result: " << result << "\n";
}
Range-based for循环
Range-based for循环是一种简化循环结构的方式,用于遍历容器中的元素:
#include <vector>
#include <iostream>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
std::cout << num << " ";
}
// 输出: 1 2 3 4 5
}
C++11标准库简介
基础数据结构(vector, list, map)
C++11提供了丰富的标准库容器,如std::vector
、std::list
和std::map
。std::vector
是一个动态数组:
#include <vector>
#include <iostream>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
std::cout << num << " ";
}
// 输出: 1 2 3 4 5
}
std::list
是一个双向链表:
#include <list>
#include <iostream>
int main() {
std::list<int> numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
std::cout << num << " ";
}
// 输出: 1 2 3 4 5
}
std::map
是一个键值对的关联容器:
#include <map>
#include <iostream>
int main() {
std::map<int, std::string> ages = {{1, "Alice"}, {2, "Bob"}, {3, "Charlie"}};
for (const auto& pair : ages) {
std::cout << pair.first << ": " << pair.second << "\n";
}
// 输出:
// 1: Alice
// 2: Bob
// 3: Charlie
}
常用算法(find, sort, transform)
C++11标准库提供了许多内置算法,如std::find
、std::sort
和std::transform
。std::find
用于查找元素:
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
auto it = std::find(numbers.begin(), numbers.end(), 3);
if (it != numbers.end()) {
std::cout << "Found: " << *it << "\n";
}
// 输出: Found: 3
}
std::sort
用于对容器进行排序:
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
std::vector<int> numbers = {5, 2, 8, 3, 1};
std::sort(numbers.begin(), numbers.end());
for (int num : numbers) {
std::cout << num << " ";
}
// 输出: 1 2 3 5 8
}
std::transform
用于转换容器中的元素:
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::vector<int> squares(numbers.size());
std::transform(numbers.begin(), numbers.end(), squares.begin(), [](int n) {
return n * n;
});
for (int num : squares) {
std::cout << num << " ";
}
// 输出: 1 4 9 16 25
}
其他实用功能
C++11还提供了许多其他实用的功能,如std::tuple
、std::function
和std::optional
等。std::tuple
是一种可以存储多种类型数据的容器:
#include <tuple>
#include <iostream>
int main() {
std::tuple<int, std::string, double> t(1, "Alice", 3.14);
std::cout << std::get<0>(t) << "\n"; // 输出: 1
std::cout << std::get<1>(t) << "\n"; // 输出: Alice
std::cout << std::get<2>(t) << "\n"; // 输出: 3.14
}
std::function
是一种通用函数指针类型,可以存储可调用的对象:
#include <functional>
#include <iostream>
int main() {
std::function<int(int)> add = [](int n) {
return n + 1;
};
std::cout << add(5) << "\n"; // 输出: 6
}
std::optional
提供了一种表示可选值的方式:
#include <optional>
#include <iostream>
int main() {
std::optional<int> optValue = 10;
if (optValue) {
std::cout << *optValue << "\n"; // 输出: 10
}
}
共同学习,写下你的评论
评论加载中...
作者其他优质文章