在可用的C ++中,最好使用auto
许多变量,尤其是那些类型已知但讨厌键入的变量:
weird_template_type<int,char>::subtype::recursive_subtype some_function() {
// ...
}
// ...
auto val = some_function();
在有意义的情况下,将显微镜用于RAII对象也是很好的,例如用于锁定:
some_setup_code();
int val;
{
lock_guard<mutex> lk(mut);
val = read_shared_memory();
}
do_something(val);
有没有办法混合这两个习惯用法,例如,当您的共享内存读取代码返回一个奇怪的类型时?
明显的版本不起作用:
auto val;
{
lock_guard<mutex> lk(mut);
val = read_shared_memory();
}
do_something(val);
由于auto
没有初始化程序的变量,因此在编译时失败。
同样,您不能在作用域块内声明变量,否则以后将不可用。
我唯一能看到的直接选择是1.明确地键入变量声明(bleah),或2.auto
与其他已知类型相同的表达式一起使用(不是改进)。还有其他方法吗?
基本上,您所说的是复杂的变量初始化。典型的解决方案是使用lambda:
auto val = [&]() {
lock_guard<mutex> lk(mut);
return read_shared_memory();
}();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句