我在iOS开发(Xcode)中仅使用C ++头类。
在A.hpp
class A {
public:
A() {
B b;
}
void run() {
b.run();
}
private:
B b;
}
B在科学计算库中定义,b.run()预计会花费很长时间。
在ViewController.mm中(或将其视为main.cpp)
A* a = new A(); a->run();
工作正常(通常我预计变量重新定义会出现一些错误,这里b定义了两次)但是比预期花费的时间多两倍。
删除B b;
中的A()
后,一切正常。
我想知道是否因为调用b.run()
两次导致这个奇怪的事情的原因并且编译器实际上将两个定义视为单独的初始化并且单独调用它们。但为什么编译器没有捕获到如此严重的错误?
答案 0 :(得分:4)
定义与成员变量同名的局部变量是有效的。这将简单地隐藏该范围内的成员变量(您仍然可以通过此 - > b来访问它。)
答案 1 :(得分:0)
首先,代码中没有变量重新定义,因为A()中的声明具有局部范围,并且与作为类成员的'b'的声明不矛盾(它只是隐藏了该范围内的成员变量)。第二,从给定的信息我不明白为什么这需要两倍的时间,除非B类的构造函数调用其run()方法或做一些耗时的事情。你应该检查B类的构造函数及其内部的作用。