std::array 成员的地址在 C++ 中是否可能为空?

Is it possible for an address of an std::array member to be null in C++?

是否可以修改 a 使 if 语句失败?

std::array<int,4> a = {{1,2,3,4}};

for (int i=0;i<a.size();i++)
{
    auto ptr = &a[i];
    if (ptr != nullptr)
    {
        printf("value at %d is %d\n",i,a[i]);
    }
    else
    {
        printf("Invalid array\n");
    }
}

标准库容器中元素的地址不能为空,只要您正确使用容器的 API。这是因为,假设您满足 API 的所有先决条件,容器保证其所有元素都是有效对象,并且有效对象永远不会有空地址。但是,一旦您违反了先决条件(例如,从空向量中弹出),整个程序就会出现未定义的行为,并且您最终可能会看到 if 语句的“不可能”分支被执行。

例如,在显示的代码段中,尝试访问 a[4] 会给程序带来未定义的行为。它可能不会导致 else 分支被采用,但你永远不知道。

if (ptr != nullptr) 块完全是多余的。它什么都不做。测试永远不会失败。 std::array<int, 4> 是作为局部自动变量创建的,它的所有元素都必须有一个有效地址。