【发布时间】:2014-01-30 08:14:57
【问题描述】:
我正在尝试初始化const& 变量。我尝试初始化的变量的值取决于某些条件。
例如:
typedef std::vector<string> string_vector;
string_vector data_pool;
const string& data;
if( some_cond )
{
// do something and set data
data = data_pool[some_index1]
}
else
{
// do something and set data
data = data_pool[some_index2]
}
当然上面的代码是无效的,但这就是我想要做的。
我可以使用ternary operator:
const string& data = (some_cond)? data_pool[some_index1] : data_pool[some_index2];
但是除了设置值之外,这种语法实际上并不能让我做任何事情。
所以现在我尝试使用lambda expression(不太确定我是否正确):
const string& data = [&]{
string tmp = "";
{
// do something and set tmp
tmp = data_pool[some_index1]
}
else
{
// do something and set tmp
tmp = data_pool[some_index2]
}
return tmp;
}
但我的问题是这个解决方案需要新的字符串分配,我现在负担不起,因为这段代码是我程序的瓶颈。
问题data 如何以复杂的方式但高效地进行初始化?
注意
我可以很容易地解决这个问题。 data 最终会引用 data_pool 中的某个项目,所以我需要做的就是计算所需的索引,然后初始化 data。但是,我对解决方法不感兴趣,而是对这个基本问题的优雅技术/实践感兴趣。如果初始化比计算向量中的某些索引更复杂怎么办?
【问题讨论】:
-
这种函数的签名是什么?
-
std::string initString。const引用可以绑定到临时对象。 -
但这也会为我想避免的返回值分配新字符串。我错过了什么?
标签: c++ reference initialization constants