当前位置: 首页 > 知识库问答 >
问题:

C++语法理解“using”问题

阎功
2023-03-14

我阅读了一些用C++创建的项目的技术文档。我发现了一行包含我不懂的语法的代码

using c = char (& (cClass::* [1]) (cClass(*)[2]) &)[3];

我在这里看到using关键字。这意味着我们要处理一个别名,但这行是做什么的?我怎么能理解呢?我认为这会创建一个命名别名c并将右边表达式的结果分配给它。但是这个表达是什么呢?

共有2个答案

公宜春
2023-03-14

类型必须从中间开始解释(如果是变量声明,变量名将在中间)。向右走,直到打到结尾或。然后向左走,直到打到开头或。此时,您要么解释了整个类型(然后就完成了),要么就在(...)中,在这种情况下,您将丢弃它们并重复相同的过程(先向右,然后向左)。

由于这不是一个变量声明,您首先需要找到变量名在哪里,如果它是一个。凭直觉(一旦您有了一些经验)更容易做到,但一个很好的经验法则是从左边走,直到您点击)(...)[...]

知道了这一点,我们就可以把这变成一个变量声明。我添加了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的数组的指针,包含cclasses”。

1函数参数右侧的&表示只能对lvalues调用它(该函数是“&-qualified”)。

滕学义
2023-03-14

这里是如何阅读你的类型,一步一步。为了清楚起见,下面我们声明一个变量x

T x[1]

xt类型的数组(长度为1

cClass::* x[1]

xcclass中指向成员的指针数组(长度为1)。

V (cClass::* x[1]) (U)

xcclass中指向成员函数的指针数组(长度为1)。所述成员函数以u为参数,返回v

V (cClass::* x[1]) (U) &

xcclass中指向成员函数的指针数组(长度为1)。所述成员函数以u为参数,返回v,并且只能对lvalues调用。

V & (cClass::* x[1]) (U) &

xcclass中指向成员函数的指针数组(长度为1)。所述成员函数u为参数,返回对v的引用,并且只能对lvalues调用。

V (& (cClass::* x[1]) (U) &)[3]

xcclass中指向成员函数的指针数组(长度为1)。所述成员函数以u为参数,返回对v的数组(长度为3)的引用,并且只能对lvalues调用。

最后,要获得您的实际类型

char (& (cClass::* x[1]) (cClass(*)[2]) &)[3]

我们选择v=charu=(cClass(*)[2]),后者是指向cClass的数组(长度2)的指针。

更易读的备选方案:

using char3 = char [3];
using ptrTo2cClass = cClass(*)[2];
using ptrToMethod = char3 & (cClass::*) (ptrTo2cClass) &;
using c = ptrToMethod[1];
 类似资料:
  • 我阅读了一些用C++创建的项目的技术文档。我发现有一行代码包含我不懂的语法: 我看到关键字,这意味着我们处理别名,但这行是做什么的?我怎么能理解呢?我认为这会创建命名别名并将表达式的结果分配给它。但是这个表达是什么呢?

  • 本文向大家介绍C# using语法糖图文详解,包括了C# using语法糖图文详解的使用技巧和注意事项,需要的朋友参考一下 前言 什么是语法糖? (语法糖就是像糖一样的语法…) 语法糖(Syntactic sugar),又名糖衣语法,最早是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的。 通俗点来讲就是简化后的语法,但是其效果和原先语法是一样的,只是更方便我们程序员使用

  • 以下示例将在将HTML String解析为Document对象后展示选择器方法的使用。 jsoup支持类似于CSS选择器的选择器。 语法 (Syntax) Document document = Jsoup.parse(html); Element sampleDiv = document.getElementById("sampleDiv"); Elements links = sampleDi

  • 老师们好: 下面是一段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 那么为什么