TL; DR
ใช้std::reference_wrapper
แบบนี้:
#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
คำตอบที่ยาว
ในฐานะที่เป็นมาตรฐานให้เห็นสำหรับภาชนะมาตรฐานX
ที่มีวัตถุประเภทT
, T
ต้องมีจากErasable
X
Erasable
หมายความว่าการแสดงออกต่อไปนี้จะเกิดขึ้นอย่างดี:
allocator_traits<A>::destroy(m, p)
A
เป็นประเภทจัดสรรคอนเทนเนอร์, m
อินสแตนซ์จัดสรรและเป็นตัวชี้ประเภทp
*T
ดูที่นี่สำหรับErasable
ความหมาย
โดยค่าเริ่มต้นstd::allocator<T>
จะใช้เป็นตัวจัดสรรของเวกเตอร์ ด้วยตัวจัดสรรเริ่มต้นข้อกำหนดจะเทียบเท่ากับความถูกต้องของp->~T()
(หมายเหตุT
คือประเภทการอ้างอิงและp
เป็นตัวชี้ไปยังการอ้างอิง) อย่างไรก็ตามตัวชี้ไปยังการอ้างอิงนั้นผิดกฎหมายดังนั้นการแสดงออกจึงไม่เกิดขึ้น