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

问题描述 投票:0回答:1

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

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++ equals operator-precedence assign multiple-assignment
1个回答
2
投票

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

WCHAR *p = (myWchar = new WCHAR[4]);
。如果
myWchar
有自定义
operator=
和/或
p
的类型有自定义构造函数或从
myWchar
的类型转换为
p
的类型,这可能意味着
p
myWchar
最终彼此略有不同,但在这种情况下,
WCHAR*
PWSTR
基本上是相同的类型,因此它们最终都分配给相同的事物,即
new WCHAR[4]
的结果。

在这种情况下,它实际上是对

myWchar
赋值的结果,用作
p
的初始化,但即使结构是:

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

所以都是赋值,没有初始化,赋值是从右到左关联的,所以它会以相同的顺序发生(它只是使用赋值而不是初始化语义来赋值给

p
,这可能很重要对于自定义类型)。

© www.soinside.com 2019 - 2024. All rights reserved.