我發現在嵌入代碼負索引訪問我調試:我可以保證使用負移位訪問指針嗎?
for (int i = len; i > 0; i--)
{
data[i - 1] = data[i - 2]; // negative access when i == 1
}
我讀this關於類似的情況,但在OP arr[-2]
保證是因爲arr
點的先前中間OK分配數組。就我而言,data
是一個類中的指針由構造與初始化:
public:
constructor_name(): ... data(new T_a[size]), ...
和指針data
在類中的第一個成員:
template <class T_a, class T_b, int size>
class T_c
{
private:
T_a *data;
T_b *...;
int ...;
int ...;
int ...;
public:
constructor_name(): ... data(new T_a[size]), ...
現在,有一個否定索引訪問是故意的並且有意義的可能性?有沒有一種方法編寫程序員能夠確保data[-1]
將訪問特定數據,使用#pragma pack()
或其他任何方法?
看到*data
是班上第一個讓我覺得這是一個bug的成員,但我不確定。如果確實是一個錯誤 - 是UB
?
確實是[未定義的行爲](https:// en。wikipedia.org/wiki/Undefined_behavior)所以你沒有任何保證 –
@BasileStarynkevitch如果'data'位於課堂上其他地方 - 它會有什麼區別嗎? – CIsForCookies
我不這麼認爲。關於UB的C++標準非常強大。 –