std::map.operator[] 不适用于全球地图
std::map.operator[] not working with global maps
谁能告诉我如何利用 std::map.operator[]
来获取 const std::map
的值?
例如:
file.h
#ifndef _FILE_H
#define _FILE_H
#include <map>
#include <string>
const std::map<std::string,std::string> STRINGS= {
{"COMPANY","MyCo"}
,{"YEAR","2022"}
};
#endif
file.cpp
#include "cpp_playground.h"
#include <iostream>
int main (void){
std::cout<< "Code by "<< STRINGS["COMPANY"] << " " << STRINGS["YEAR"] << std::endl;
}
在 Visual Studio 2015 中出现此错误,但我无法解释它
Severity Code Description Project File Line Suppression State
Error C2678 binary '[': no operator found which takes a left-hand operand of type 'const std::map<std::string,std::string,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>' (or there is no acceptable conversion) cpp_playground d:\user\documents\visual studio 2015\projects\cpp_playground\cpp_playground.cpp 10
std::map
中的 operator[]
定义为 return 对具有给定键的对象的引用 - 或者创建它,如果它不存在,这会修改映射,这就是为什么它不是 const 方法的原因。该运算符没有 const 版本,这就是您收到显示错误的原因。
使用std::map
's at(...)
function for access-only. Note that it throws a std::out_of_range
exception if the given key is not contained in the map; in C++20 or later you can use contains()
检查给定键是否存在。
谁能告诉我如何利用 std::map.operator[]
来获取 const std::map
的值?
例如:
file.h
#ifndef _FILE_H
#define _FILE_H
#include <map>
#include <string>
const std::map<std::string,std::string> STRINGS= {
{"COMPANY","MyCo"}
,{"YEAR","2022"}
};
#endif
file.cpp
#include "cpp_playground.h"
#include <iostream>
int main (void){
std::cout<< "Code by "<< STRINGS["COMPANY"] << " " << STRINGS["YEAR"] << std::endl;
}
在 Visual Studio 2015 中出现此错误,但我无法解释它
Severity Code Description Project File Line Suppression State
Error C2678 binary '[': no operator found which takes a left-hand operand of type 'const std::map<std::string,std::string,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>' (or there is no acceptable conversion) cpp_playground d:\user\documents\visual studio 2015\projects\cpp_playground\cpp_playground.cpp 10
std::map
中的 operator[]
定义为 return 对具有给定键的对象的引用 - 或者创建它,如果它不存在,这会修改映射,这就是为什么它不是 const 方法的原因。该运算符没有 const 版本,这就是您收到显示错误的原因。
使用std::map
's at(...)
function for access-only. Note that it throws a std::out_of_range
exception if the given key is not contained in the map; in C++20 or later you can use contains()
检查给定键是否存在。