Я пишу некоторый тестовый код в Objc и использую Clang -rewrite-objc для преобразования его в C ++, и обнаружил, что в коде C ++ возникает ошибка переопределения, но код на самом деле работает нормально. Тестовый код:
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *var = @"";
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(9 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"%@",var);
NSObject *var = @"";
NSLog(@"%@",var);
});
}
return 0;
}
И используйте clang -rewrite-objc main.m
переписать на C ++:
static void __main_block_func_0(struct __main_block_impl_0 *__cself) {
NSString *var = __cself->var; // bound by copy
NSLog((NSString*)&__NSConstantStringImpl__var_folders_n0_4hrn9qgn3blbbt6ybq79lzt00000gn_T_main_e76f89_mi_2,var);
NSObject *var = (NSString *)&__NSConstantStringImpl__var_folders_n0_4hrn9qgn3blbbt6ybq79lzt00000gn_T_main_e76f89_mi_3;
NSLog((NSString *)&__NSConstantStringImpl__var_folders_n0_4hrn9qgn3blbbt6ybq79lzt00000gn_T_main_e76f89_mi_4,var);
}
, так почему я могу переопределить var
в области рисунка блока ?
Я думаю, что этот случай не подходит для local var
и global var
в C ++.
Спасибо, если какая-либо помощь илиобсудить ~