c++ - const 的条件赋值,没有三元?
c++ - conditional assignment of const, without ternary?
假设我想根据依赖于条件的复杂计算分配一个 const 变量。
如果情况简单,我可以这样做:
const int N = myBool ? 1 : 2;
但更像是
const int N = myBool ? <lengthy calculation> : <other lengthy calculation>;
我正在做的是这个,但我想要更干净的东西:
int N_nonconst;
if (myBool) {
N_nonconst = <lengthy calculation>;
}
else {
N_nonconst = <other lengthy calculation>;
}
const int N = N_nonconst;
显然,我也可以这样做:
int possibility1 = <lengthy calculation>;
int possibility2 = <other lengthy calculation>;
const in N = myBool ? possibility1 : possibility2;
但我实际上只想执行其中一项冗长的计算。
如果我要扩展语言,我会考虑做类似 const_deferredAssignment
声明的东西:
const_deferredAssignment int N;
if (myBool) {
N = <...>;
}
else {
N = <...>;
}
我也可以将这些计算包含在 functions/methods 中,但它们使用了一堆局部变量,因此这将是一个相当冗长的函数调用。
您可以将冗长的计算移到一个单独的函数中:
int lengthCalculation()
{
if(myBool)
{
return <lengthy calculation>;
}
else
{
return <other lengthy calculation>;
}
}
const int N = lengthCalculation();
如果您不想创建可以使用本地 lambda 的单独函数:
const int N = [&]()
{
if(myBool)
{
return <lengthy calculation>;
}
else
{
return <other lengthy calculation>;
}
}();
您可以将每个计算都包装在 lambda 中,并捕获局部变量以减少其参数的冗长性
{
// ...
auto firstFunc = [&]() -> int { ... };
auto secondFunc = [&]() -> int { ... };
const int N = myBool ? firstFunc() : secondFunc();
}
这样两个函数实际上只执行了一个
你可以尝试使用
SWITCH(myBool)
{
Case 0 : first_lengthy_calculation
Break;
Case 1 : second_lengthy_calculation
Break;
}
假设我想根据依赖于条件的复杂计算分配一个 const 变量。
如果情况简单,我可以这样做:
const int N = myBool ? 1 : 2;
但更像是
const int N = myBool ? <lengthy calculation> : <other lengthy calculation>;
我正在做的是这个,但我想要更干净的东西:
int N_nonconst;
if (myBool) {
N_nonconst = <lengthy calculation>;
}
else {
N_nonconst = <other lengthy calculation>;
}
const int N = N_nonconst;
显然,我也可以这样做:
int possibility1 = <lengthy calculation>;
int possibility2 = <other lengthy calculation>;
const in N = myBool ? possibility1 : possibility2;
但我实际上只想执行其中一项冗长的计算。
如果我要扩展语言,我会考虑做类似 const_deferredAssignment
声明的东西:
const_deferredAssignment int N;
if (myBool) {
N = <...>;
}
else {
N = <...>;
}
我也可以将这些计算包含在 functions/methods 中,但它们使用了一堆局部变量,因此这将是一个相当冗长的函数调用。
您可以将冗长的计算移到一个单独的函数中:
int lengthCalculation()
{
if(myBool)
{
return <lengthy calculation>;
}
else
{
return <other lengthy calculation>;
}
}
const int N = lengthCalculation();
如果您不想创建可以使用本地 lambda 的单独函数:
const int N = [&]()
{
if(myBool)
{
return <lengthy calculation>;
}
else
{
return <other lengthy calculation>;
}
}();
您可以将每个计算都包装在 lambda 中,并捕获局部变量以减少其参数的冗长性
{
// ...
auto firstFunc = [&]() -> int { ... };
auto secondFunc = [&]() -> int { ... };
const int N = myBool ? firstFunc() : secondFunc();
}
这样两个函数实际上只执行了一个
你可以尝试使用
SWITCH(myBool)
{
Case 0 : first_lengthy_calculation
Break;
Case 1 : second_lengthy_calculation
Break;
}