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)
它是选项 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,这对于自定义类型可能很重要)。
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |