Как следует из тайла, в C ++ у нас не может быть содержимого, содержащего ссылки, поскольку объекты внутри контейнеров должны быть назначаемыми. Мы не можем переназначить ссылку после ее инициализации.
Тем не менее, в моей программе у меня есть static const std::map
, который содержит константную ссылку в качестве значений и прекрасно компилируется. Мне интересно, если причина в том, что карта объявляется как const и инициализируется при объявлении, что говорит компилятору, что «этот объект является const, и его содержимое не изменится, поэтому можно использовать ссылку на const в качестве значений».
Я не мог найти ответы где-либо еще. Код работает, но я не хочу, чтобы он сбивал с толку других разработчиков.
Edit, Извините, я не включил код. Вот оно:
const glm::dvec4& GetObjectColor(const msg::ObjectType type) {
static const std::map<msg::ObjectType, const glm::dvec4&> kObjectColorMap = {
{msg::ObjectType::PERSON, kWhite},
{msg::ObjectType::ANIMAL, kSilver},
{msg::ObjectType::SEDAN, kGray},
{msg::ObjectType::SUV, kRed},
{msg::ObjectType::VAN, kMaroon},
{msg::ObjectType::BICYCLE, kYellow},
{msg::ObjectType::TRICYCLE, kOlive},
{msg::ObjectType::MOTORCYCLE, kLime},
{msg::ObjectType::TRUCK, kGreen},
{msg::ObjectType::BUS, kAqua},
{msg::ObjectType::PICKUP, kTeal},
{msg::ObjectType::UNKNOWN, kBlue}};
return kObjectColorMap.at(type);
}