我在我使用的程序中找到了一些代码:
PWSTR myWchar = NULL;
WCHAR *p = myWchar = new WCHAR[4];
如何读取带有两个等号的行?
如何计算?
答:
myWchar = new WCHAR[4];
WCHAR *p = myWchar
或B:
WCHAR *p = myWchar ;
myWchar = new WCHAR[4];
它是选项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
,这可能很重要对于自定义类型)。