C++中含双等号的连续赋值语句如何执行?
连续赋值语句的执行逻辑解析
你遇到的这段C++代码:
PWSTR myWchar = NULL; WCHAR *p = myWchar = new WCHAR[4];
这条包含两个等号的语句,执行逻辑完全对应你列出的A方式,原因如下:
在C++中,赋值运算符=是右结合的,连续赋值会从右往左依次执行:
- 首先执行
myWchar = new WCHAR[4];:通过new分配一块能容纳4个WCHAR的内存,将这块内存的首地址赋值给myWchar - 接着执行
WCHAR *p = myWchar;:把myWchar中存储的内存地址赋值给指针p
执行完成后,p和myWchar会指向同一块new分配的内存区域。
而你列出的B方式不符合C++的语法规则,因为赋值运算符的右结合性决定了不会先执行左侧的赋值操作。
内容的提问来源于stack exchange,提问作者user3443063
相关产品推荐
相关产品推荐

