TP; DR
Bunun std::reference_wrapper
gibi kullanın :
#include <functional>
#include <string>
#include <vector>
#include <iostream>
int main()
{
std::string hello = "Hello, ";
std::string world = "everyone!";
typedef std::vector<std::reference_wrapper<std::string>> vec_t;
vec_t vec = {hello, world};
vec[1].get() = "world!";
std::cout << hello << world << std::endl;
return 0;
}
Demo
Uzun cevap
Olarak standart göstermektedir , standart bir kap için X
tür nesneler içeren T
, T
olmalıdır Erasable
den X
.
Erasable
aşağıdaki ifadenin iyi oluşturulduğu anlamına gelir:
allocator_traits<A>::destroy(m, p)
A
kabın ayırıcı tipidir, m
ayırıcı örneğidir ve p
türün bir göstergesidir *T
. Tanım için buraya bakın Erasable
.
Varsayılan olarak, std::allocator<T>
vektörün ayırıcısı olarak kullanılır. Varsayılan ayırıcı ile gereksinim, p->~T()
( T
bir referans tipidir ve p
bir referansın göstergesidir) geçerliliğine eşittir . Bununla birlikte, bir referansa işaret etmek yasa dışıdır , dolayısıyla ifade iyi biçimlendirilmemiştir.