我来自php和当我定义这样的东西时:
$a = array();
echo $a[586];
Run Code Online (Sandbox Code Playgroud)
我将收到有关未定义索引的通知.
与此同时,c++我可以这样做:
map<int, string> my_map;
cout << "Map is: " << my_map[34535];
string sentence = "acdefb s";
cout << "Letter is: " << sentence[15];
Run Code Online (Sandbox Code Playgroud)
我不会有任何错误.
为什么php不可能在c++?
因为PHP和C++是两种截然不同的语言,具有完全不同的语义.在C++中使用[]带有std::map对象的运算符时,如果映射中的键尚不存在,则会将新元素插入到映射中.在PHP中,情况并非如此.
至于你与第二个例子std::string sentance,它是未有效使用[]操作者具有无效索引(索引是>= sentance.length()上一个)std::string在C++中.您可能不会收到任何"错误",因为使用无效索引的结果std::string是未定义的行为,这意味着任何事情都可能发生.现代平台上的一个常见结果是分段错误/访问冲突,这通常会导致程序崩溃.
有了std::string您可以使用std::string::at()替代的[]经营者,如果你想对不确定的行为保护.如果使用无效索引,该at函数会执行边界检查和抛出std::out_of_range.