C++11教程为初学者提供快速入门指南,涵盖C++基础知识回顾、新特性简介,包括自动类型推断、范围基初始化、智能指针与RAII原则、标准容器与算法增强以及并发编程基础,旨在通过学习这些关键特性,帮助编程者编写高效、安全且易于维护的代码。
C++基础知识回顾C++是一种多范式编程语言,拥有面向对象编程、泛型编程、过程式编程等多种特性。接下来,我们简要回顾C++的基础概念,包括变量、数据类型、运算符、控制结构与循环等。
变量与数据类型
在C++中,数据类型定义了变量可以存储的值的类型。基本数据类型如int
(整型)、float
(浮点型)、double
(双精度浮点型)等。在C++11中,还引入了char8_t
、char16_t
和char32_t
用于表示不同的字符集。
#include <iostream>
int main() {
int a = 10;
float b = 3.14f;
double c = 3.14159;
double d = static_cast<double>(b); // 显式类型转换
std::cout << "a = " << a << std::endl;
std::cout << "b = " << b << std::endl;
std::cout << "c = " << c << std::endl;
std::cout << "d = " << d << std::endl;
return 0;
}
控制结构与循环
控制结构如if
、else
、switch
语句用于实现条件判断,而循环如for
和while
用于重复执行代码块。在C++11中,还提供了do-while
循环。
#include <iostream>
int main() {
int a = 1;
int b = 0;
if (a > 0) {
std::cout << "a is positive." << std::endl;
} else {
std::cout << "a is not positive." << std::endl;
}
switch (a) {
case 1:
std::cout << "Case 1" << std::endl;
break;
case 2:
std::cout << "Case 2" << std::endl;
break;
default:
std::cout << "Default case" << std::endl;
}
do {
b++;
} while (b < 3);
for (int i = 0; i < 5; ++i) {
std::cout << "Looping: " << i << std::endl;
}
return 0;
}
C++11新特性简介
C++11引入了许多新特性,改进了语言和库的性能、安全性和易用性。以下是一些关键特性。
引入标准库的增强
C++11增强了标准库,包括集合(如std::unordered_map
)、排序算法(如std::sort
)和迭代器等。
#include <iostream>
#include <vector>
#include <unordered_map>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
std::sort(v.begin(), v.end());
std::unordered_map<std::string, int> map = {{"apple", 1}, {"banana", 2}, {"cherry", 3}};
for (int num : v) {
std::cout << num << " ";
}
std::cout << std::endl;
for (const auto &pair : map) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
自动类型推断(auto关键字)
C++11引入了auto
关键字,用于自动推断变量类型,简化代码并避免类型错误。
#include <iostream>
int main() {
auto x = 42; // 自动推断为int类型
std::cout << "x = " << x << std::endl;
auto y = "Hello"; // 自动推断为std::string类型
std::cout << "y = " << y << std::endl;
return 0;
}
常量表达式与模板模板化
C++11支持常量表达式为模板参数,允许在编译时计算模板参数,提高程序的效率和灵活性。
#include <iostream>
template <int N>
struct Constant {
static const int value = N;
};
int main() {
std::cout << "Constant 10: " << Constant<10>::value << std::endl;
std::cout << "Constant 20: " << Constant<20>::value << std::endl;
return 0;
}
范围基词和可变模板参数
范围基初始化
范围基初始化允许将数组或容器初始化为可读取的范围,提升代码的可读性和简洁性。
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
for (int num : v) {
std::cout << num << " ";
}
return 0;
}
可变模板参数的使用
可变模板参数允许模板函数或类接收动态数量的参数。
#include <iostream>
#include <vector>
template <typename T, std::size_t... Args>
void printArgs(T arg, std::size_t arg1, std::size_t arg2) {
std::cout << arg << std::endl;
std::cout << arg1 << std::endl;
std::cout << arg2 << std::endl;
}
int main() {
printArgs("Hello", 1, 2);
return 0;
}
智能指针与RAII原则
C++11中的智能指针
智能指针如std::unique_ptr
和std::shared_ptr
管理资源的生命周期,确保资源在不再使用时被正确释放。
#include <iostream>
#include <memory>
class Resource {
public:
Resource(int id) : id(id) { std::cout << "Resource created." << std::endl; }
~Resource() { std::cout << "Resource destroyed." << std::endl; }
int getId() const { return id; }
private:
int id;
};
int main() {
std::unique_ptr<Resource> ptr(new Resource(42));
std::shared_ptr<Resource> sharedPtr(new Resource(24));
return 0;
}
RAII原则应用
RAII(Resource Acquisition Is Initialization)原则提倡在初始化时获得资源,在结束时释放资源。
#include <iostream>
#include <memory>
class Resource {
public:
Resource() : file("example.txt") {
std::cout << "Resource created." << std::endl;
}
~Resource() {
std::cout << "Resource destroyed." << std::endl;
}
private:
std::ofstream file;
};
int main() {
{
Resource r;
// 使用资源代码块...
}
return 0;
}
C++11标准容器与算法
标准STL容器扩展
C++11引入了std::optional
,用于表示可能不存在的值。
#include <iostream>
#include <optional>
int main() {
std::optional<int> maybeValue;
if (maybeValue.has_value()) {
std::cout << "Value: " << *maybeValue << std::endl;
} else {
std::cout << "No value." << std::endl;
}
return 0;
}
迭代器和算法的增强
C++11增强了迭代器和算法,提供了更强大的容器访问和操作能力。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
std::sort(v.begin(), v.end());
std::reverse(v.begin(), v.end());
for (int num : v) {
std::cout << num << " ";
}
return 0;
}
并发编程与线程
并发容器与线程基础
C++11提供了并发容器(如std::mutex
和std::condition_variable
)和线程管理工具,支持多线程编程。
#include <iostream>
#include <mutex>
#include <thread>
std::mutex mtx;
void threadFunction() {
std::lock_guard<std::mutex> lock(mtx);
std::cout << "Thread 1 locked mutex." << std::endl;
}
int main() {
std::thread t1(threadFunction);
std::thread t2(threadFunction);
t1.join();
t2.join();
return 0;
}
以上就是C++11的一些关键特性介绍。通过学习这些新特性,你可以编写更加高效、安全和易于维护的代码。希望这份指南能够帮助你快速上手C++11编程。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章