gpt4 book ai didi

c++ - va_arg 中的转换方式

转载 作者:太空宇宙 更新时间:2023-11-04 16:02:28 25 4
gpt4 key购买 nike

我正在研究可变函数和参数。

我注意到 va_arg 能够将对象转换为其他对象。例如,当下一个参数是 char 时,但您正在使用 va_arg 就像它应该是 int 一样,它会转换 charint:

函数调用:

AddNumbers(3, 5, 'a', 20);

函数声明:

int AddNumbers(int count, ...) {
int result;

va_list va;
va_start(va, count);
for(int i = 0; i < count; ++i) {
result += va_arg(va, int);
}
return result;
}

所以我的问题是:这个函数使用了哪种转换(C 风格、dynamic_cast 等)?

最佳答案

这与类型转换无关。在这种情况下,它之所以有效是因为参数 promotion

当您使用可变参数函数时,integer types smaller than int (like e.g. char) are promoted to int .

这就是它在将字 rune 字传递给函数时起作用的原因。如果您尝试其他类型,例如一个浮点值,那么它将不再起作用。

至于什么va_arg宏(它主要作为宏实现)确实如此,它完全依赖于实现。它可能根本不进行任何转换,而是使用其他形式的 type punning相反。

关于c++ - va_arg 中的转换方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41122049/

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