Это не только разница. К членам ArrayList можно получить доступ через индекс, например, обычные массивы, а также члены ArrayList могут легко отсортироваться в прямом и обратном порядке, а два ArrayList могут быть легко объединены, что не относится к простому списку. Подробнее см. В
http://www.cirvirlab.com/index.php/c-sharp-code-examples/112-c-sharp-arraylist-example.html
Правильно ли, что существует некоторая двусмысленность относительно того, когда операторы равенства с указателями являются UB?
Нет, потому что этот отрывок из п. 6.5.9 (3):
Операторы
blockquote>==
и!=
аналогичны реляционным операторам, за исключением их более низкого приоритета.Предполагает, что из раздела 6.5.9 (6) также применяется к Операторы равенства:
При сравнении двух указателей [...] Во всех остальных случаях поведение не определено.
blockquote>Если нет двусмысленности, когда точное сравнение указателей с операторами равенства будет UB?
Существует неопределенное поведение во всех случаях, для которых стандарт явно не определяет поведение.
Всегда ли UB, если at
§6.3.2.3 (5):
Целое число может быть преобразовано в любой тип указателя. За исключением, как указано ранее, результат определяется реализацией, может быть неправильно выровнен, может не указывать на объект ссылочного типа и может быть ловушечным представлением.
blockquote>Что делать, если один указатель ссылается на память, которая была
free
d?§6.2.4 (2):
Значение указателя становится неопределенным, когда объект, на который он указывает достигает конца своего времени жизни.
blockquote>можно сделать вывод, что никогда не существует UB в том смысле, что все «другие» сравнения должны давать false?
No. Стандарт определяет, при каких условиях два указателя должны сравнивать равные, и при каких условиях два указателя должны сравнивать не равные. Любое сравнение равенств между двумя указателями, которые выходят за пределы обоих этих двух наборов условий, вызывает неопределенное поведение.
Действительно ли в §6.5.9 (6) означает, что сравнение равенства бессмысленных, но поразрядных равных указателей всегда должно быть ложным ?
Нет, он не определен.
==
и!=
, попадающие в сравнительные операторы для целей п. 6.5.9 (6), являются наиболее неубедительными. §6.5.8 (5) (При сравнении двух указателей ...) находится в операциях Relational (не включает == и! =), Аналогично мне не следует применять § 6.5.5 (5), и если равенство-сравнение несвязанных объектов было UB, тогда такие вещи, как сравнение fn-указателей, были бы UB, что кажется сомнительным. – PSkocik 11 July 2018 в 00:11