下面的代码使用c++11 中引入的代码,但是,在 g++ 和 cmake 中std::map::at指定旧版本(我已经尝试过-std=c++03,-std=c++0x和)时,它仍然会被编译。-std=c++98其他 c++11 功能不起作用,例如基于范围的 for 循环。
#include <iostream>
#include <map>
int main() {
std::map<int, int> my_map;
my_map[0] = 1;
std::cout << my_map.at(0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
g++命令:
g++ -std=c++03 -o main *.cpp
Run Code Online (Sandbox Code Playgroud)
CMakeLists.txt:
cmake_minimum_required(VERSION 2.6)
project(test)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++03")
add_executable(main main.cpp)
Run Code Online (Sandbox Code Playgroud)
两种情况下的输出:
1
Run Code Online (Sandbox Code Playgroud)
这里可能有什么问题?提前致谢。
我正在寻找一种方法来初始化std :: map中的第一个值,然后根据键初始化第二个值.这是我的代码:
#pragma once
#include <string>
#include <map>
class Student
{
public:
Student(
double Score_Maths,
double Score_Eng,
double Score_Chem,
double Score_Bio,
double Score_His
);
~Student();
private:
std::string Surname;
std::map<std::string, double> Subject_Scores = { {"Maths"}, {"English"}, {"Chemistry"}, {"Biology"}, {"History"} };
};
Run Code Online (Sandbox Code Playgroud)
我想要做的是,在类中已经有了这些键,然后使用构造函数初始化值,但当然在初始化地图时显示错误,任何帮助?