我試圖初始化變量const&
。我試圖初始化的變量的值取決於某些條件。
例如: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
。不過,我對解決方法不感興趣,而是對這個基本問題採用了一種優雅的技術/實踐。如果初始化比在矢量中計算一些索引複雜一點,該怎麼辦?
使用函數。 –
這個函數的簽名是什麼? – idanshmu
'std :: string initString'。 'const'引用可以綁定到臨時。 –