如何正确转换int
为long
lambda 表达式的内部/外部?如何正确检查 lambda 中的数学溢出?
int n = 12; // input parameter from std::cin
int a = 23; // input parameter from std::cin
int i = 34; // input parameter from std::cin
auto f = [n, a] (int i) { return a * (n - (i - 1)); };
auto result = f(i);
在lambda内部/外部乘以整数后检查溢出的最佳方法是什么?
auto result = f(i);
if ((result > std::numeric_limits<int>::max()) || (result < std::numeric_limits<int>::min())) {
cout << "overflow was detected" << endl;
}
我是否需要将 TRT(尾随返回类型)添加-> long
到 lambda 才能正确转换为int
to long
?
auto f = [n, a] (int i) -> long { return a * (n - (i - 1)); };
我是否需要添加static_cast
到 lambda 才能正确转换int
为long
:
auto f = [n, a] (int i) { return static_cast<long>(a) * (n - (i - 1)); };
或者,可能是,我需要结合这个?
auto f = [n, a] (int i) -> long { return static_cast<long>(a) * (n - (i - 1)); };
或者,可能是,我需要写 lambda 的类型?
std::function< long( int ) > f = [n, a] (int i) { return a * (n - (i - 1)); };