typedef using 定义别名与复杂类型的解析

类型别名

using定义别名的用法和typedef区别不大,但是using可以使用模板,比如:

1
2
template<typename T>
using ArrayPointer = T(*)[10];

解析复杂类型

C++复杂类型的解析遵循以下顺序,方括号和圆括号(即,标识符右侧的修饰符)优先于星号(即,标识符左侧的修饰符)。 方括号和圆括号具有相同的优先级并且都是从左到右关联。 在完全解释声明符之后,将应用类型说明符以作为最后一步。 通过使用圆括号,您可以重写默认关联顺序和强制实施特定解释。 但是,绝不要单独在标识符名称两边使用圆括号。 这可能会被错误解释为参数列表。

解释复杂声明符的一个简单方法是通过下列 4 个步骤“从里到外”地读取它们:

  1. 从标识符开始并直接查找方括号或圆括号(如果有)的右侧。
  2. 解释这些方括号或圆括号,然后查找星号的左侧。
  3. 如果在任何阶段遇到一个右圆括号,请返回并将规则 1 和 2 应用于圆括号内的所有内容。
  4. 应用类型说明符。
1
2
3
char *( *(*var)() )[10];
^ ^ ^ ^ ^ ^ ^
7 6 4 2 1 3 5

在此示例中,步骤是按顺序编号的,并且可以按如下方式解释:

  1. 标识符 var 声明为
  2. 指向以下内容的指针
  3. 返回以下内容的函数
  4. 指向以下内容的指针
  5. 包含 10 个元素的数组,这些元素分别为
  6. 指向以下内容的指针
  7. char 值。

参考资料

OpenHarmony 开发环境搭建最佳实践

概述

目前OpenHarmony支持的L2设备主要是Hi3861、Hi3516、Hi3518这三种单板,三种设备的驱动目前都只支持Windows设备,所以如果代码开发涉及到烧写单板镜像就需要选择一个Windows开发设备。OpenHarmony的工具链包含repo、ninja、gn、pyhton,这些工具的配置在Linux开发设备上比较容易配置。如果在Windows设备上使用虚拟机,那么Linux系统只能通过软件指令集和硬件交互,效率比较低。所以比较好的实践是将开发环境部署在Linux服务器上,或者使用微软最近力推的WSL2。由于远程服务器的搭建方法在OpenHarmony官网上已经有比较详细的描述,本文将着力介绍如何使用WSL2搭建OpenHarmony开发环境。

阅读更多

梯度下降算法

基本概念

梯度下降法(Gradient descent)是一个一阶最优化算法,通常也称为最陡下降法,但是不该与近似积分的最陡下降法(Method of steepest descent)混淆。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点;这个过程则被称为梯度上升法。

阅读更多

DApp开发环境配置指南

由于区块链与数字货币这门课程给的指导教程涉及的各种库的版本都比较旧,有的甚至连接口都已经变化,导致实际的开发过程中踩了很多的坑,特此编写此指南来对其中的开发环境配置进行说明。

阅读更多

坐标系统

img

局部空间(Local Space)

世界空间(World Space)

观察空间(View Space)

观察空间就是将对象的世界空间的坐标转换为观察者视野前面的坐标。

阅读更多

C# 特性(Attribute)

特性分为预定义特性和自定义特性,用于在运行时传递各种元素的行为信息的声明性标签。

1
2
[attribute(positional_parameters, name_parameter = value, ...)]
element
阅读更多

C# 属性(Property)

C#在字段的基础上延伸出了属性的概念。属性定义包含getset两个成员用于检索该属性的值以及对其赋值。可以在属性声明的大括号之后通过等号对其进行初始化,适用于不想将属性赋值为系统默认值时的情况。

阅读更多

Git 重命名文件和文件夹

之前在git管理的项目中重命名文件和文件夹一直使用mv指令,例如:

1
2
3
mv -r folder1 folder2
git add .
git commit "..."
阅读更多

Lua 快速入门

Lua 数据类型

Lua是动态类型的语言,不需要给变量声明类型。Lua有8个基本类型:

阅读更多

C# 关键字

修饰符

访问修饰符

访问修饰符共有四个

  • public
  • protected
  • internal
  • private
阅读更多