继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

C++11语法教程:入门与基础详解

米琪卡哇伊
关注TA
已关注
手记 228
粉丝 4
获赞 30
概述

本文提供了全面的C++11语法教程,涵盖了新特性和改进、基本语法、控制结构等多个方面,旨在帮助读者掌握C++11的新特性并提高编程效率。文章详细介绍了C++11中的新数据类型、范围for循环、智能指针、lambda表达式等重要特性,并提供了示例代码和环境配置指南。

C++11概述

C++11简介

C++11 是 C++ 语言的一个重要版本,于 2011 年正式发布。它引入了许多新的特性和改进,旨在简化代码编写、提高性能并增强语言的功能性。C++11 为现代 C++ 程序设计奠定了基础,并在后续版本中继续得到了扩展。

新特性和改进

C++11 引入了多项新特性,这些特性极大地增强了语言的功能和表达能力。以下是一些主要的新特性和改进:

  1. 新的数据类型和字面量

    • 添加了 long long 类型和 long double 类型。
    • 引入了二进制、八进制和十六进制浮点数字面量。
  2. 范围 for 循环

    • 使用 for (auto &element : container) 方式遍历容器。
  3. 初始化器列表和统一初始化

    • 使用 {} 括号进行初始化。
    • 支持成员变量的自动初始化。
  4. 智能指针和垃圾回收

    • 引入了 std::unique_ptr, std::shared_ptr, std::weak_ptr 等智能指针。
    • 示例代码:
      std::unique_ptr<int> unique_ptr(new int(10)); // 使用 unique_ptr
      std::shared_ptr<int> shared_ptr(new int(10)); // 使用 shared_ptr
      std::weak_ptr<int> weak_ptr(shared_ptr);       // 使用 weak_ptr
  5. lambda 表达式

    • 允许在代码中定义匿名函数,简化了事件处理和回调函数的编写。
    • 示例代码:
      auto lambda = [](int a, int b) { return a + b; };
      int result = lambda(3, 4); // result = 7
  6. decltype 关键字

    • 提供了一种获取表达式类型的方法。
    • 示例代码:
      int a = 10;
      decltype(a) b = 20; // b 是 int 类型
  7. 右值引用和移动语义

    • 引入 && 符号表示右值引用。
    • 支持资源转移,减少不必要的拷贝操作。
    • 示例代码:
      std::string str("hello");
      std::string move_str = std::move(str); // 移动 str 的资源
  8. 类型推导 auto 关键字

    • 编译器可以根据初始化表达式自动推断变量类型。
    • 示例代码:
      auto num = 10; // num 是 int 类型
      auto pi = 3.14; // pi 是 double 类型
  9. 强类型枚举和联合

    • enum class 用于定义强类型枚举。
    • union 支持结构化数据共享内存。
    • 示例代码:
      enum class Color { Red, Green, Blue };
      union U {
       int i;
       float f;
      };
  10. 模板的改进

    • 添加了 decltypeauto 支持模板推导。
    • 引入 constexpr 关键字,支持编译时常量表达式。
  11. 多重继承和虚继承

    • 支持多重继承和虚继承,增强了类的灵活性。
  12. 函数特化和模板元编程

    • 支持函数模板特化。
    • 引入了 constexpr 用于模板元编程。
  13. 协变返回类型
    • 允许返回子类对象。

安装和环境配置

要开始使用 C++11,需要确保您的开发环境支持 C++11 标准。以下是一些常用的工具和配置方法:

  1. 安装编译器

    • Visual Studio:确保使用 Visual Studio 2015 或更高版本。
    • GCC:确保安装了 4.8.0 或更高版本。
    • Clang:确保安装了 3.3 或更高版本。
  2. 配置编译器
    • 在 Visual Studio 中,项目属性中设置“C++ 语言标准”为“C++11 (/std:c++11)”。
    • 在命令行编译器(如 GCC 或 Clang)中,使用 -std=c++11-std=c++14 参数。

下面是一个简单的示例,展示如何在命令行中配置 GCC 编译器以支持 C++11:

g++ -std=c++11 main.cpp -o main

基本语法

变量和数据类型

C++ 中的变量是用来存储数据的容器。每个变量都有一个特定的数据类型,决定了可以存储的数据类型和大小。以下是一些常见的数据类型及其示例:

  1. 基本数据类型

    • 整型:int, short, long, long long
    • 浮点型:float, double, long double
    • 布尔型:bool
    • 字符型:char
  2. 自定义类型
    • 结构体(struct)
    • 联合体(union)
    • 枚举(enum)

示例代码:

int a = 10;       // 整型变量
float b = 3.14;   // 浮点型变量
char c = 'A';     // 字符型变量
bool d = true;    // 布尔型变量

常量和字面量

常量是不可改变的变量,其值一旦初始化就不能再修改。字面量是直接写在代码中的数值。C++11 引入了一些新的字面量,使得代码更具可读性。

  1. 常量定义

    • 使用 const 关键字定义常量。
  2. 字面量类型
    • 整型字面量:10, 0x10(十六进制)
    • 浮点型字面量:3.14f, 3.14L(长双精度)
    • 字符型字面量:'A'
    • 布尔型字面量:true, false

示例代码:

const int MAX_SIZE = 100;    // 常量整型
const double PI = 3.14159;   // 常量浮点型
const char LETTER = 'A';     // 常量字符型
const bool IS_TRUE = true;   // 常量布尔型

运算符和表达式

运算符是用于执行特定操作的符号。C++ 中的运算符可以分为以下几类:

  1. 算术运算符+, -, *, /, %
  2. 逻辑运算符&&, ||, !
  3. 关系运算符==, !=, >, <, >=, <=
  4. 位运算符&, |, ^, ~, <<, >>
  5. 赋值运算符=, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

示例代码:

int a = 10;
int b = 5;
int sum = a + b;       // 加法运算
int diff = a - b;      // 减法运算
int prod = a * b;      // 乘法运算
int quot = a / b;      // 除法运算
int mod = a % b;       // 求余运算
bool isGreater = a > b; // 关系运算

控制结构

条件语句(if, switch)

条件语句用于根据条件来执行不同的代码块。C++ 中主要有 ifswitch 两种条件结构。

  1. if 语句

    • 基本形式:if (condition) { ... }
    • 带 else 的形式:if (condition) { ... } else { ... }
    • 带 else if 的形式:if (condition1) { ... } else if (condition2) { ... } else { ... }
  2. switch 语句
    • 基本形式:switch (expression) { case value1: ... break; case value2: ... break; default: ... }

示例代码:

int num = 10;
if (num > 5) {
    std::cout << "num is greater than 5";
} else {
    std::cout << "num is less than or equal to 5";
}

char letter = 'A';
switch (letter) {
case 'A':
    std::cout << "Letter is A";
    break;
case 'B':
    std::cout << "Letter is B";
    break;
default:
    std::cout << "Letter is not A or B";
}

循环语句(for, while, do-while)

循环语句用于重复执行一段代码,直到满足某个条件为止。C++ 中主要有三种循环结构:forwhiledo-while

  1. for 循环

    • 基本形式:for (init; condition; increment) { ... }
  2. while 循环

    • 基本形式:while (condition) { ... }
  3. do-while 循环
    • 基本形式:do { ... } while (condition);

示例代码:

for (int i = 0; i < 5; i++) {
    std::cout << i << " ";
}
std::cout << std::endl;

int j = 0;
while (j < 5) {
    std::cout << j << " ";
    j++;
}
std::cout << std::endl;

int k = 0;
do {
    std::cout << k << " ";
    k++;
} while (k < 5);
std::cout << std::endl;

跳转语句(break, continue, goto)

跳转语句用于控制循环和条件分支的流程。C++ 中主要有 breakcontinuegoto 三种跳转语句。

  1. break

    • 用于提前结束循环或 switch 语句。
  2. continue

    • 用于跳过当前循环中的剩余代码并进入下一次循环。
  3. goto
    • 用于无条件跳转到程序中的标签处。

示例代码:

for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break;
    }
    std::cout << i << " ";
}
std::cout << std::endl;

for (int j = 0; j < 10; j++) {
    if (j % 2 == 0) {
        continue;
    }
    std::cout << j << " ";
}
std::cout << std::endl;

int k = 0;
label:
std::cout << k << " ";
k++;
if (k < 5) {
    goto label;
}
std::cout << std::endl;

函数

函数定义和调用

函数是执行特定任务的代码块,函数定义包括函数名、参数列表和返回类型。函数调用则用于执行函数中的代码。

  1. 函数定义

    • 基本形式:return_type function_name(parameters) { ... }
  2. 函数调用
    • 基本形式:function_name(args)

示例代码:

int add(int a, int b) {
    return a + b;
}

int result = add(3, 4); // result = 7
std::cout << "Result: " << result << std::endl;

参数传递

C++ 支持多种参数传递方式,包括值传递和引用传递。

  1. 值传递

    • 参数值被复制到函数内部。
    • 示例代码:

      void printValue(int value) {
       std::cout << "Value: " << value << std::endl;
      }
      
      int num = 10;
      printValue(num); // 输出 "Value: 10"
  2. 引用传递

    • 参数值在函数内部直接引用。
    • 示例代码:

      void printReference(int &ref) {
       std::cout << "Reference: " << ref << std::endl;
      }
      
      int num = 10;
      printReference(num); // 输出 "Reference: 10"

返回值类型

函数可以返回指定类型的值,返回类型决定了函数的输出。

示例代码:

int getNumber() {
    return 10;
}

int result = getNumber(); // result = 10
std::cout << "Result: " << result << std::endl;

递归函数

递归函数是一种函数,它在执行过程中调用自身。递归函数通常用于解决可以分解为相同类型子问题的问题。

示例代码:

int factorial(int n) {
    if (n == 0) {
        return 1;
    }
    return n * factorial(n - 1);
}

int result = factorial(5); // result = 120
std::cout << "Factorial: " << result << std::endl;

标准库简介

STL容器(vector, list, map)

C++ 标准模板库(STL)提供了多种容器,用于存储和管理数据。以下是一些常用的容器:

  1. vector

    • 动态数组。
    • 示例代码:
      std::vector<int> vec = {1, 2, 3, 4, 5};
      for (int i : vec) {
       std::cout << i << " ";
      }
      std::cout << std::endl;
  2. list

    • 双向链表。
    • 示例代码:
      std::list<int> list = {1, 2, 3, 4, 5};
      for (int i : list) {
       std::cout << i << " ";
      }
      std::cout << std::endl;
  3. map
    • 关联容器,基于键值对。
    • 示例代码:
      std::map<int, std::string> map = {{1, "one"}, {2, "two"}, {3, "three"}};
      for (const auto &pair : map) {
       std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
      }

常用算法(sort, find, copy)

STL 提供了许多算法,用于处理和操作容器中的数据。

  1. sort

    • 对容器中的元素进行排序。
    • 示例代码:
      std::vector<int> vec = {5, 3, 1, 2, 4};
      std::sort(vec.begin(), vec.end());
      for (int i : vec) {
       std::cout << i << " ";
      }
      std::cout << std::endl;
  2. find

    • 在容器中查找特定元素。
    • 示例代码:
      std::vector<int> vec = {5, 3, 1, 2, 4};
      auto it = std::find(vec.begin(), vec.end(), 3);
      if (it != vec.end()) {
       std::cout << "Found element: " << *it << std::endl;
      }
  3. copy
    • 将容器中的元素复制到另一个容器。
    • 示例代码:
      std::vector<int> vec = {1, 2, 3, 4, 5};
      std::vector<int> copyVec;
      copyVec.resize(vec.size());
      std::copy(vec.begin(), vec.end(), copyVec.begin());
      for (int i : copyVec) {
       std::cout << i << " ";
      }
      std::cout << std::endl;

字符串处理和输入输出流

C++ 标准库提供了强大的字符串处理和输入输出操作功能。

  1. 字符串处理

    • 使用 std::string 类。
    • 示例代码:
      std::string str = "Hello, World!";
      std::cout << str << std::endl;
  2. 输入输出流
    • 使用 std::cinstd::cout 进行输入输出操作。
    • 示例代码:
      int num;
      std::cout << "Enter a number: ";
      std::cin >> num;
      std::cout << "You entered: " << num << std::endl;
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP