Почему я могу переопределить переменную в одной области видимости в C ++? - PullRequest
2 голосов
/ 07 ноября 2019

Я пишу некоторый тестовый код в 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 ++.

Спасибо, если какая-либо помощь илиобсудить ~

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...