gpt4 book ai didi

c++ - 在具有可变参数的方法中转换警告

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:21 25 4
gpt4 key购买 nike

抱歉,如果问题不正确,我是 Objective-C 的新手。
我明白为什么这段代码会抛出警告:“警告:传递参数 1 of 'initWithObjectsAndKeys:' makes pointer from integer without”

NSDictionary *dictNames =
[[NSDictionary alloc] initWithObjectsAndKeys:
3, @"",
4, @"",
5, @"",nil];

NSDictionary 的键和值必须是 NSObject 而不是基本类型,例如整数 3、4 和 5。(如有必要请纠正我)。
但我不明白为什么这个警告会随着第一个键的唯一“正确输入”而消失。

NSDictionary *dictNames =
[[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInteger:3], @"",
4, @"",
5, @"",nil];

是因为 NSDictionary 假设了其他 Keys 的类型?这种初始化方式正确吗?

最佳答案

你说的方法原型(prototype)是

-(id)initWithObjectsAndKeys:(id)firstObject, ...;

因此第一个参数必须是一个 ObjC 对象。但其余的由可变参数传递。在 C 中,任何原语都可以作为可变参数传递(想想 printf)。因此编译器不会发出任何警告。

虽然编译器无法检查 vararg 参数的类型,但这并不意味着将非 id 传递给方法是有效的。

关于c++ - 在具有可变参数的方法中转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2521633/

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