为什么我可以在C ++的一个范围内重新声明变量?

我在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

我认为这种情况不适用于C ++中的local varglobal var

感谢您的帮助或讨论〜

sgflh 回答:为什么我可以在C ++的一个范围内重新声明变量?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3147366.html

大家都在问