【发布时间】:2020-07-26 11:58:32
【问题描述】:
实现的最佳方法是什么:
for (const auto &arg : args) {
try {
auto var = create(arg);
} catch (const std::invalid_argument &e) {
continue;
}
// ...
// use(var)
// ...
}
一种方法是移动
// ...
// use(var)
// ...
进入 try 块,但这引入了整个嵌套负载。另外,我不想捕捉来自use的错误
typeof(var) 是一个没有默认构造函数的类。
【问题讨论】:
-
您需要为
var使用显式类型(而不是auto)并将声明(但不是赋值)移到try语句上方。 -
@Dai
typeof(var)没有默认构造函数 -
使用
std::optional。 -
@TobiAkinyemi 如果
var的类型没有默认构造函数,则使用placement-new。 -
@TobiAkinyemi 为什么它会“减慢”你的程序——或者让事情变得过于复杂?
标签: c++