为什么 int ia2[10] 的默认值为 0,即使它是在函数内部定义的?

Why int ia2[10] has a default value of 0 even though it is defined inside a function?

我是 C++ 的新手,正在尝试学习数组的概念。我从 C++ primer 中看到了下面的代码和语句。

As with variables of built-in type, a default-initialized array of built-in type that is defined inside a function will have undefined values.

从这个语句来看,下面的int ia2[10]是在int main(){}函数内部定义的,因此不应该有默认值,它的所有元素都应该是未定义的。然而,当我试图打印出它们的值时,它们都等于 0,这是任何未初始化的 int 数组的默认值。

为什么会这样?

int main() {
    string sa2[10]; //all elements are empty strings
    int ia2[10]; //all elements are undefined

    for (int i = 0; i < 10; i++){
        cout << "sa2[" << i << "] " << sa2[i] << endl;
        cout << "ia2[" << i << "] " << ia2[i] << endl;
    }
}

输出:

sa2[0] 
ia2[0] 0
sa2[1] 
ia2[1] 0
sa2[2] 
ia2[2] 0
sa2[3] 
ia2[3] 0
sa2[4] 
ia2[4] 0
sa2[5] 
ia2[5] 0
sa2[6] 
ia2[6] 0
sa2[7] 
ia2[7] 0
sa2[8] 
ia2[8] 0
sa2[9] 
ia2[9] 0

它不是强制具有一些随机值。不确定那里会有什么价值,所以它可以是任何东西,包括全部归零。另请注意,读取值是未定义的行为。