我有一个C++代码的小片段:
#include <array>
#include <string>
#include <iostream>
int main()
{
std::string name = "mario";
std::cerr << "Hello world! " + name + "\n";
std::array<float, 4> arr = {12, 12.3, 13, 14};
std::cerr << "first item is: " + std::to_string(arr.front()) << std::endl;
std::cerr << "last item is: " + std::to_string(arr[-1]) << std::endl;
return 0;
}
它编译并输出以下内容:
work ⯠c++ -std=c++11 -o hello_world hello.cpp
work ⯠./hello_world
Hello world! mario
first item is: 12.000000
last item is: 0.000000
但是,如果我把前两行注释掉,比如:
#include <array>
#include <string>
#include <iostream>
int main()
{
//std::string name = "mario";
//std::cerr << "Hello world! " + name + "\n";
std::array<float, 4> arr = {12, 12.3, 13, 14};
std::cerr << "first item is: " + std::to_string(arr.front()) << std::endl;
std::cerr << "last item is: " + std::to_string(arr[-1]) << std::endl;
return 0;
}
编译并运行它。然后输出如下:
work ⯠c++ -std=c++11 -o hello_world hello.cpp
work ⯠./hello_world
first item is: 12.000000
last item is: 12.000000
我有三个问题:
-
为什么在第一种情况下,当使用
arr[-1]
?
-
为什么在第二种情况下使用
ARR〔1〕
?
-
为什么我们得到不同的输出
ARR〔1〕
在第二种情况下,当我们评论前两个陈述时?
编辑
:根据评论,我理解
ARR〔1〕
将是未定义的行为,因此在第一种情况下返回0.000。但是,注释掉其他语句如何改变这种行为呢?这让我完全困惑,因为我来自python世界。