我阅读了一些用C++创建的项目的技术文档。我发现有一行代码包含我不懂的语法:
using c = char (& (cClass::* [1]) (cClass(*)[2]) &)[3];
我看到在这里使用
关键字,这意味着我们处理别名,但这行是做什么的?我怎么能理解呢?我认为这会创建命名别名c
并将表达式的结果分配给它。但是这个表达是什么呢?
类型必须从中间开始解释(如果是变量声明,变量名将在中间)。向右走,直到打到结尾或。然后向左走,直到打到开头或
。此时,您要么解释了整个类型(然后就完成了),要么就在
(...)
中,在这种情况下,您将丢弃它们并重复相同的过程(先向右,然后向左)。
由于这不是一个变量声明,您首先需要找到变量名在哪里,如果它是一个。凭直觉(一旦您有了一些经验)更容易做到,但一个很好的经验法则是从左边走,直到您点击)
或(...)
或[...]
。
知道了这一点,我们就可以把这变成一个变量声明。我添加了x
作为变量名:
char (& (cClass::*x[1]) (cClass(*)[2]) &)[3];
现在我们可以开始阅读类型了。首先我们转到右边:x
变量x
是...x[1]
一个有一个元素的数组,包含...
(右边没有其他内容,转到左边。)Cclass::*x[1]
类Cclass
的指针,类型为...(Cclass::*x[1])
(左边没有其他内容,跳过括号。)(Cclass::*x[1])
。&
包含一些参数的函数,&
限定的1,返回...
(右边没有其他内容,请到左边。)&(CClass::*X[1])(............)&
引用...(&(Cclass::*x[1])(...........)&)
(左边没有其他内容,跳过括号。)(&(Cclass::*x[1])(........)&)[3]
包含3个元素的数组,包含...字符(&(Cclass::*x[1])(........)&)[3]
字符
我们就完了。函数参数(cclass(*)[2]
)的类型必须使用相同的过程单独解释。它是“大小为2的数组的指针,包含cclass
es”。
1函数参数右侧的&
表示只能对lvalues调用它(该函数是“&
-qualified”)。
这里是如何阅读你的类型,一步一步。为了清楚起见,下面我们声明一个变量x
。
T x[1]
x
是t
类型的数组(长度为1
cClass::* x[1]
x
是cclass
中指向成员的指针数组(长度为1)。
V (cClass::* x[1]) (U)
x
是cclass
中指向成员函数的指针数组(长度为1)。所述成员函数以u
为参数,返回v
。
V (cClass::* x[1]) (U) &
x
是cclass
中指向成员函数的指针数组(长度为1)。所述成员函数以u
为参数,返回v
,并且只能对lvalues调用。
V & (cClass::* x[1]) (U) &
x
是cclass
中指向成员函数的指针数组(长度为1)。所述成员函数以u
为参数,返回对v
的引用,并且只能对lvalues调用。
V (& (cClass::* x[1]) (U) &)[3]
x
是cclass
中指向成员函数的指针数组(长度为1)。所述成员函数以u
为参数,返回对v
的数组(长度为3)的引用,并且只能对lvalues调用。
最后,要获得您的实际类型
char (& (cClass::* x[1]) (cClass(*)[2]) &)[3]
我们选择v=char
和u=(cClass(*)[2])
,后者是指向cClass
的数组(长度2)的指针。
更易读的备选方案:
using char3 = char [3];
using ptrTo2cClass = cClass(*)[2];
using ptrToMethod = char3 & (cClass::*) (ptrTo2cClass) &;
using c = ptrToMethod[1];
我阅读了一些用C++创建的项目的技术文档。我发现了一行包含我不懂的语法的代码: 我在这里看到关键字。这意味着我们要处理一个别名,但这行是做什么的?我怎么能理解呢?我认为这会创建一个命名别名并将右边表达式的结果分配给它。但是这个表达是什么呢?
老师们好: 下面是一段C 语言结合openssl库做 AES CBC 128 PCSKPadding7 加密, 加密的部分是可以, 解密是总是出现乱码。请老师们帮忙给看看: 程序输出如下: Ciphertext (Base64): O4SkNWTfpKVOSrvpdcwbXg== Decrypted text: :▒▒1aٞ▒tp▒▒L▒$b;▒▒5dߤ▒NJ▒▒u▒ 代码如下
本文向大家介绍C语言函数语法详解,包括了C语言函数语法详解的使用技巧和注意事项,需要的朋友参考一下 1、概述 在C语言中,函数是来完成子程序或者某个模块的功能。有主程序或者其他函数调用,其他函数之间可以相互调用。同一函数可以被一个或多个函数任意次调用。 注意: a、一个C程序有一个或多个程序模块组成,每一个程序模块作为一个源程序文件。一个源文件可以为多个C程序共用。
我在Scala 2.10中遇到了语法问题,无法理解。 < code>for(a 那么为什么
我对ANTLR相对来说是新的,所以请原谅我。 但是当我试图解析下面的表达式时 我最终出现以下错误: 第1:38行:'''处的令牌识别错误 第1:42行:'''处的令牌识别错误 规则r没有方法或者它有参数 规则'r'的意思是什么?我怎么能理解问题的原因呢?任何帮助都将不胜感激!
本文向大家介绍C语言 基本语法示例讲解,包括了C语言 基本语法示例讲解的使用技巧和注意事项,需要的朋友参考一下 C 基本语法 我们已经看过 C 程序的基本结构,这将有助于我们理解 C 语言的其他基本的构建块。 C 的令牌(Tokens) C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。例如,下面的 C 语句包括五个令牌: printf("Hello, World!