我有一个类没有默认的构造函数或赋值运算符,因此根据另一个函数的结果,在if/else语句中声明和初始化该类。但是稍后它会说它超出了范围,即使条件语句的两个路径都会创建一个实例。
考虑以下示例(使用int
只是为了说明这一点):
#include <iostream>
int main()
{
if(1) {
int i = 5;
} else {
int i = 0;
}
std::cout << i << std::endl;
return 0;
}
在条件语句中声明的变量是否会在条件语句结束时超出作用域?如果没有默认构造函数,但构造函数的参数取决于某些条件,应该如何处理这种情况?
编辑
鉴于给出的答案,情况更加复杂,因此可能需要改变方法。有一个抽象基类A和两个派生自A的类B和C。如何处理像这样的情况:
if(condition) {
B obj(args);
} else {
C obj(args);
}
改变方法?因为A是抽象的,我不能只声明A* obj
并使用new
来创建适当的类型。
class A
有一个虚函数(C++不是我的强项,我主要使用Fortran),那就是这样。 - tpg2114