class Foo {
Bar b;
}
b , содержал в Foo. Если объект Foo заканчивает время жизни, b автоматически заканчивает время жизни также. Это что состав моделей. b выше обозначает сам объект, не только указатель на него как в Java. Для этого, если b выйдет из объема, объект закончит время жизни.
class Foo {
Bar * b;
}
Здесь, объект b указывает на, используются или ссылаемый объект Foo. Если объект Foo заканчивает время жизни, объект b указывает на, может продолжить жить, в зависимости от обстоятельств. Это может привыкнуть к образцовому агрегированию и общим отношениям. Объект может быть совместно использован с другими объектами Foo, например.
Указатели примерно, какие ссылки находятся в Java. Они ни на что не могут также указать. Если указатель ни на что не указывает, это - нулевой указатель.
Подобный указателям ссылки. Ссылки в C++ должны быть инициализированы и могут только указать на один (допустимый) объект, для которого была инициализирована ссылка. Ссылка для этого не может содержать значение, которое не могло означать "ничего" как null
в Java.
Вот что я прочитал:
5.2.1 Подписка [expr.sub]
1 Постфиксное выражение, за которым следует квадратное выражение скобки это постфиксное выражение. Одно из выражений должно иметь тип «указатель на T», а другое должно иметь перечисление или целочисленный тип. Результатом является lvalue типа «T». Тип «T» должен быть полностью определенным типом объекта.61) Выражение E1 [E2] идентично (по определению) * ((E1) + (E2)) [Примечание: см. 5.3 и 5.7 для деталей * и + и 8.3.4 для деталей массивов. - Конечная заметка]
-C ++ Draft.
int a = 10, b = 20;
int &c[] = {a, b};
Итак, представьте, что &c[0]
будет чем-то подобно *&(c+0)
, ссылки ИМХО подобны псевдонимам. Следовательно, исходя из понятия «массивы», он будет пытаться разыменовать значение, содержащееся в ссылке, которая не нужна.
Потому что ссылки не являются объектами. Ссылки были в основном введены для поддержки вызова по ссылке и возврата по ссылке без вставки &
на сайте вызова. То, что вы, вероятно, хотите, это массив указателей.