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

use*_*063 1 c++ operator-precedence assign multiple-assignment

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

PWSTR myWchar = NULL;
WCHAR *p = myWchar = new WCHAR[4];
Run Code Online (Sandbox Code Playgroud)

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

它是如何计算的?

A:

 myWchar  = new WCHAR[4];
 WCHAR *p = myWchar 
Run Code Online (Sandbox Code Playgroud)

或乙:

 WCHAR *p = myWchar ;
 myWchar  = new WCHAR[4];
Run Code Online (Sandbox Code Playgroud)

Sha*_*ger 9

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

WCHAR *p = (myWchar = new WCHAR[4]);
Run Code Online (Sandbox Code Playgroud)

如果myWchar有一个自定义operator=和/或 的类型有一个自定义构造函数或从的类型p转换为的类型,这可能意味着和最终彼此略有不同,但在这种情况下,和基本上是相同的类型,所以他们最终都被分配给同一件事,即myWcharppmyWcharWCHAR*PWSTRnew WCHAR[4].

myWchar在这种情况下,它实际上是用作 的初始化的赋值结果p,但即使结构是:

PWSTR myWchar = NULL;
WCHAR *p;
p = myWchar = new WCHAR[4];
Run Code Online (Sandbox Code Playgroud)

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