是否可以修改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");
}
}
uj5u.com熱心網友回復:
標準庫容器中元素的地址不能為空,只要您正確使用容器的 API。這是因為,假設您滿足 API 的所有先決條件,容器保證其所有元素都是有效物件,并且有效物件永遠不會有空地址。但是,一旦您違反了先決條件(例如,從空向量中彈出),整個程式就會出現未定義的行為,您最終可能會看到“不可能”的if陳述句分支被執行。
例如,在顯示的片段中,嘗試訪問a[4]會給程式帶來未定義的行為。它可能不會導致else分支被占用,但你永遠不知道。
uj5u.com熱心網友回復:
該if (ptr != nullptr)塊是完全冗余的。它什么也不做。測驗永遠不會失敗。是作為本地自動變數在那里創建的std::array<int, 4>,它不能沒有為其所有元素的有效地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/420556.html
標籤:
