Будучи совершенно зеленым с C++, я столкнулся с поведением, которое я не совсем понимаю, и не смог найти объяснения даже при интенсивном поиске в Google, поэтому я надеялся, что кто-то сможет объясните, что именно здесь неправильно.Доступ к статическому члену unordered_map с помощью оператора []
// test.h
#include <unordered_map>
typedef std::unordered_map<int, int> test_type;
class test
{
public:
static const test_type tmap;
};
// test.cpp
#include "test.h"
const test_type test::tmap = {
{ 1, 1 }
};
// main.cpp
#include "test.h"
int main()
{
// Attempt 1: access key via operator[]
std::cout << test::tmap[1];
// Attempt 2: access key via at()
std::cout << test::tmap.at(1);
return 0;
}
Если у меня есть Покушение 1 в моем коде, компилятор Visual Studio настаивает на том, что я с помощью двоичного [
оператора, который не был определен, но это на самом деле не имеет смысла для меня, потому что, насколько я знаете, нет двоичного оператора [
, (скобки всегда унарные, верно?).
Итак, почему не пытается 1 работа?
Скобки двоичные, первым параметром является unordered_map, а второй - ключ (1). –
_ "Если я определяю карту вне класса, метод operator [] работает так, как ожидалось" _ Does it? Ты уверен? –
@LightnessRacesinOrbit Ну да: http://cpp.sh/4dab – Schlaus