为了账号安全,请及时绑定邮箱和手机立即绑定

C++11语法入门:新手必读教程

标签:
C++
概述

本文全面介绍了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_ptrstd::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::vectorstd::liststd::mapstd::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::findstd::sortstd::transformstd::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::tuplestd::functionstd::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
    }
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消