在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.显式地输入变量声明(不好),或者2.使用您知道的与相同类型的其他表达式一起使用auto
(不是改进)。还有其他方法吗?
decltype()
? - HolyBlackCatauto val = (lock_guard<mutex>(mut), read_shared_memory()); do_something(val);
- cpplearnerread_shared_memory()
只是queue_.size()
。在这里添加一个仅有两行且仅被调用一次的单独函数似乎并不值得。 - Tom Hunt