带有两个等号的 C++ 命令如何工作?

How does a C++ command with two equal signs work?

提问人:user3443063 提问时间:8/16/2023 最后编辑:M. Justinuser3443063 更新时间:10/4/2023 访问量:154

问:

我在我使用的程序中找到了一些代码:

PWSTR myWchar = NULL;
WCHAR *p = myWchar = new WCHAR[4];

我将如何阅读带有两个等号的行?

它是如何计算的?

一个:

 myWchar  = new WCHAR[4];
 WCHAR *p = myWchar 

或 B:

 WCHAR *p = myWchar ;
 myWchar  = new WCHAR[4];
C++ 运算符优先级 分配 多重赋

评论

7赞 Jesper Juhl 8/16/2023
这是选项 A..
7赞 Mestkon 8/16/2023
分配按从右到左的顺序进行评估
4赞 Marek R 8/16/2023
分配运算符具有从右到左的关联性
3赞 Some programmer dude 8/16/2023
WCHAR *p = myWchar = new WCHAR[4];与 完全相同。请注意,变量 (like ) 的初始化不是赋值。这是初始化WCHAR *p = (myWchar = new WCHAR[4]);PWSTR myWchar = NULL;
9赞 tadman 8/16/2023
这不是一个“命令”,而是一个“声明”。在这里使用正确的术语不仅有助于我们专注于您的问题,还可以告知 C++ 的工作原理。

答:

9赞 ShadowRanger 8/16/2023 #1

它是选项 A,完全等同于(带有不必要的 parens):

WCHAR *p = (myWchar = new WCHAR[4]);

如果有一个自定义和/或类型有一个自定义构造函数或从 的类型转换为 的类型,这可能意味着并最终彼此略有不同,但在这种情况下,并且基本上是相同的类型,因此它们最终都分配给了同一事物,结果是 .myWcharoperator=pmyWcharppmyWcharWCHAR*PWSTRnew WCHAR[4]

在本例中,它实际上是赋值的结果,用作 的初始化,但即使结构为:myWcharp

PWSTR myWchar = NULL;
WCHAR *p;
p = myWchar = new WCHAR[4];

所以它都是赋值,没有初始化,赋值是从右到左的关联,所以它会以相同的顺序发生(它只是使用赋值而不是初始化语义来赋值,这可能对自定义类型很重要)。p

评论

0赞 Bathsheba 8/17/2023
知道这个网站,它将被关闭和删除,因为它是重复的。(所有 C++ 问题都是“你能给我 C++ 规范吗”的重复。但这是一个很好的答案。投个赞成票,尽你所能享受它。