AxisZql’s blog
首页
搜索
归档
Reading List
留言
友情链接
随笔
axiszql
文章
29
分类
7
标签
51
Reading List
留言
友情链接
随笔
归档
搜索
分类
标签
技术分享
🐧C++开发常用技巧
发布于: 2023-3-4
最后更新: 2024-10-4
次查看
C++
开发
基础
category
type
status
date
slug
summary
tags
password
Property
Oct 4, 2024 08:03 AM
icon

1. 命令行参数读取与解析

  • 主要函数:getopt(),该函数由Unix标准库提供,包含在<unistd.h>头文件中。 函数定义:

    2. 字符串转整数

    • 主要函数:atio()【ascii to integer】,包含在<stdlib.h>头文件中

      3. 左值(lvalue)、右值(rvalue)及右值引用

      • 左值:表示一个占据内存中某个可识别的位置(也就是一个地址)的对象
      • 右值:一个表达式不是左值就是右值。那么右值是不表示内存中某个可以识别位置对象的表达式,右值只存在于计算过程中每个临时寄存器中。不能修改
      • C++11中引入右值引用 ,通过使用右值引用可以减少临时对象的创建,例如如下例子。
        • 一般引用实现的重载复制运算符:
        • 测试代码:
          使用一般引用实现的重载赋值运算符的临时创建对象如下:
        • 使用右值引用实现的重载赋值运算符:
        • 同样的测试代码的运行结果如下:

      4. 数组越界异常捕获

      • 提要:在C++中基本数组类型越界时系统是不会报异常的,如下列代码
      notion image
      • vector则会报越界异常
      • 直接使用a[4]系统会报异常但是try…catch…无法捕获异常,因为std::vector::operator[]不执行边界检查,属于典型的未定义行为(Undefined Behavior),这种情况下try/throw/catch不起作用,程序会崩溃。 而使用上面代码中的std::vector::at,它会执行边界检查,如果越界,会抛出std::out_of_range异常,所以在访问vector元素时,最好使用.at(),而不是[]

      开发技巧

      自定义hash函数

      CPP特性

      move semantic
      one of the main goal: increase performance, since moving an object is faster and more efficient than deep copying the object.【移动语义比深拷贝更高效】
      prerequisite knowledge:lvalue,rvalue
      A simplified definition of lvalues is that lvalues are objects that refer to a location in memory. Rvalues are anything that is not a lvalue.
      a simple case:
      notion image
      notion image
       
       
      • 作者:axiszql
      • 链接:https://axiszql.com/article/cplusplus-development-skill
      • 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
      相关文章
      Algorithm Note
      《Rust Course》 learning Not
      MongoDB事务
      Golang异常处理
      常见算法
      Golang Learning
      Algorithm Noteonline notes
      Loading...
      目录
      0%
      1. 命令行参数读取与解析2. 字符串转整数3. 左值(lvalue)、右值(rvalue)及右值引用4. 数组越界异常捕获开发技巧CPP特性
      axiszql
      axiszql
      向往Rust、C++和Go的家伙!🐧
      文章
      29
      分类
      7
      标签
      51
      最新发布
      《Rust Course》 learning Not
      《Rust Course》 learning Not
      2025-4-3
      Algorithm Note
      Algorithm Note
      2025-4-3
      Vscode-NeoVim、WLS2 Vim /NeoVim、Goland+Vim使用技巧
      Vscode-NeoVim、WLS2 Vim /NeoVim、Goland+Vim使用技巧
      2025-3-16
      Windows 开发环境下的疑难杂症
      Windows 开发环境下的疑难杂症
      2025-3-16
      C++开发常用技巧
      C++开发常用技巧
      2024-10-4
      集成Gitlab CI/CD、Docker、Kubernetes来实现流水线部署
      集成Gitlab CI/CD、Docker、Kubernetes来实现流水线部署
      2024-9-10
      目录
      0%
      1. 命令行参数读取与解析2. 字符串转整数3. 左值(lvalue)、右值(rvalue)及右值引用4. 数组越界异常捕获开发技巧CPP特性
      2022-2025axiszql.

      AxisZql’s blog | 向往Rust、C++和Go的家伙!🐧

      Powered byNotionNext 4.7.7.