我目前正在尝试弄清如何根据条件初始化变量。这是我要修改的当前代码:
int dimsOut[4];
dimsOut[0] = data->nDataVar();
dimsOut[1] = dims[0];
dimsOut[2] = dims[1];
dimsOut[3] = dims[2];
const size_t dataSize = data->primType().getTypeSize() * dimsOut[0] * dimsOut[1] * dimsOut[2] * dimsOut[3];
由于这是一个大型项目的一部分(大部分是C ++ 98,其中包括C ++ 03的某些部分),因此我想尽量减少修改,以免在其余代码中出现任何问题。
因此,我想做的只是在data->nDataVar()
返回1的情况下执行上面的代码,并在返回其他内容的情况下
基本上做到这一点
int dimsOut[3]; dimsOut[0] = data->nDataVar(); dimsOut[1] = dims[0]; dimsOut[2] = dims[1]; const size_t dataSize = data->primType().getTypeSize() * dimsOut[0] * dimsOut[1] * dimsOut[2];
我知道无法使用if语句,因为变量将超出范围。
编辑:我现在解决了我的问题。它虽然不漂亮,但却可以实现预期的效果。
Edit2:零钱
int decide_dimension = data->nDataVar();
std::vector<int> dimsOut;
dimsOut.resize(3);
dimsOut[0] = dims[0];
dimsOut[1] = dims[1];
dimsOut[2] = dims[2];
if (decide_dimension != 1)
{
dimsOut.push_back(data->nDataVar());
}
const size_t dataSize = data->primType().getTypeSize() * dimsOut[0] * dimsOut[1] * dimsOut[2] * ((decide_dimension == 1) ? 1 : dimsOut[3]);
答案 0 :(得分:0)
您可以使用三元或条件运算符。基本形式是:
condition ? valueIfTrue : valueIfFalse
示例:
const char* x = (SomeFunction() == 0) ? "is null" : "is not null";
当SomeFunction()
返回0时,x
用“ is null
”初始化,否则
加上“ is not null
”。
答案 1 :(得分:0)
您想实现的目标是不可能的。您唯一可以做的就是按照建议用三元数初始化它们,或者将初始化移到if
块中,而忽略声明。
答案 2 :(得分:0)
您说您正在修改现有的旧项目。在这种情况下,将更改保持在最低水平是很有意义的。
但是,您无法在运行时定义静态数组的大小。如果需要,可以将数组保持当前状态,并确保在data-> nDataVar()!= 1时不使用第4个元素。
然后:
const size_t dataSize = data->primType().getTypeSize() * dimsOut[0] * dimsOut[1] * dimsOut[2] * (data->nDataVar() != 1 ? 1 : dimsOut[3]);
值得一提的是,dimsOut数组似乎完全不需要计算dataSize的值,但是谁知道您的代码还用它做什么呢?如果仅在单个函数/方法中使用它,则可以轻松地将其替换为其他东西,例如std :: vector。
答案 3 :(得分:0)
您的问题有点令人困惑,或者提供的信息不足。目前尚不清楚其他地方是否需要dimsOut[]
变量。如果仅将其用于dataSize
的计算,则可以直接使用dims[]
数组并执行以下操作:
int typeSize = data->primType().getTypeSize() * data->nDataVar();
int dimension = dims[0] * dims[1] * ((condition) ? dims[2] : 1);
const size_t dataSize = typeSize * dimension;
如果在其他地方使用dimsOut,则可以使用第一个块通过三元运算符修改dimsOut [3]分配:
int dimsOut[4];
dimsOut[0] = data->nDataVar();
dimsOut[1] = dims[0];
dimsOut[2] = dims[1];
dimsOut[3] = (condition) ? dims[2] : 1;
const size_t dataSize = data->primType().getTypeSize() * dimsOut[0] * dimsOut[1] * dimsOut[2] * dimsOut[3];