C++ NSMutableDictionary的访问运算符与std::map之间的差异

C++ NSMutableDictionary的访问运算符与std::map之间的差异,c++,objective-c,nsmutabledictionary,stdmap,C++,Objective C,Nsmutabledictionary,Stdmap,当密钥不在字典中但已被访问时,objective-c是否会创建新条目?类似于std::map操作符[] int main(int argc, const char * argv[]) { @autoreleasepool { NSMutableDictionary<NSNumber *, NSString *> *D = [NSMutableDictionary new]; D[@10] = @"ten"; if (D[@1]

当密钥不在字典中但已被访问时,objective-c是否会创建新条目?类似于std::map操作符[]

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableDictionary<NSNumber *, NSString *> *D = [NSMutableDictionary new];
        D[@10] = @"ten";
        if (D[@1] == nil) // will it create an entry for D[@1]?
          NSLog(@"Found with nil");
    }
    return 0;
}
int main(int argc,const char*argv[]{
@自动释放池{
NSMutableDictionary*D=[NSMutableDictionary new];
D[@10]=“十”;
如果(D[@1]==nil)//它会为D[@1]创建一个条目吗?
NSLog(@“发现为零”);
}
返回0;
}

我想答案是不。您可以通过以下代码进行检查

int main(int argc, char * argv[]) {
  @autoreleasepool {
    NSMutableDictionary<NSNumber *, NSString *> *D = [NSMutableDictionary new];
    D[@10] = @"ten";
    NSLog(@"%@", D); // { 10 = ten; } logged
    if (D[@1] == nil) // will it create an entry for D[@1]?
      NSLog(@"%@", D); // { 10 = ten; } logged. @1 key doesn't exist
  }
}
intmain(intargc,char*argv[]){
@自动释放池{
NSMutableDictionary*D=[NSMutableDictionary new];
D[@10]=“十”;
NSLog(@“%@”,D);/{10=10;}已记录
如果(D[@1]==nil)//它会为D[@1]创建一个条目吗?
NSLog(@“%@”,D);//{10=ten;}已记录。@1键不存在
}
}
除此之外,您还应该看看Apple文档中的方法

与aKey关联的值,如果没有与aKey关联的值,则为nil

D[@1]
[D objectForKey:@1]
的语法糖。因此,根据文档,如果没有与键
1
关联的值,它将返回nil。这就是为什么
D[@1]==nil