gpt4 book ai didi

c++ - 在 C 语言中使用 "{}"进行强制转换有什么好处?

转载 作者:行者123 更新时间:2023-12-03 18:18:50 26 4
gpt4 key购买 nike

我试图理解为什么在 ProcessHacker 代码中使用这种类型转换风格。

 RtlSetHeapInformation(
PhHeapHandle,
HeapCompatibilityInformation,
&(ULONG){ HEAP_COMPATIBILITY_LFH }, // HEAP_COMPATIBILITY_LFH = 2UL
sizeof(ULONG)
);
使用“{}”进行转换有什么好处?它适用于 C 和 C++ 吗?
&(ULONG){ HEAP_COMPATIBILITY_LFH }, // HEAP_COMPATIBILITY_LFH = 2UL 

最佳答案

这个

&(ULONG){ HEAP_COMPATIBILITY_LFH },
不是类型转换。它是一个复合字面量。它创建了一个类型为 ULONG 的对象。具有自动存储持续时间并使用值 HEAP_COMPATIBILITY_LFH 对其进行初始化.然后获取对象的地址。
这是一个演示程序。
#include <stdio.h>

int main(void)
{
unsigned long *p = &( unsigned long ){ 10ul };

printf( "%lu\n", *p );

return 0;
}
程序输出是
10
来自 C 标准(6.5.2.5 复合文字)

3 A postfix expression that consists of a parenthesized type namefollowed by a brace enclosed list of initializers is a compoundliteral. It provides an unnamed object whose value is given by theinitializer list.


您可以通过以下方式想象复合字面量的定义。
例如,您可以使用花括号列表初始化标量变量,如
unsigned long x = { 10ul };
但是复合文字没有名称。所以这个构造
( unsigned long ){ 10ul }
事实上看起来像
unsigned long unnamed_literal = { 10ul };
^ ^
| |
( unsigned long ) { 10ul }
请注意,在 C++ 中没有复合字面量这样的概念。

关于c++ - 在 C 语言中使用 "{}"进行强制转换有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66504212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com