Предположит, у меня есть функция, которая принять константный аргумент ссылки пропуска,C++ функция: передать ноны константного аргумента константной ссылки параметру
int func(const int &i)
{
/* */
}
int main()
{
int j = 1;
func(j); // pass non const argument to const reference
j=2; // reassign j
}
этот код работает fine.according на грунтовку C++, что это аргумент, переходя к этой функции походит следующим образом,
int j=1;
const int &i = j;
, в котором я это синоним (псевдоним) ямайских,
мой вопрос: если я это синоним J, и я определяется как константы, я s код:
сопзЬ Int & I = J
redelcare неофициальный переменную константный на константные переменную? почему это выражение является законным в C++?
Вы имеете в виду ссылку не сам объект. то как понимать i является синонимом j? означает ли это, что i и j являются одним и тем же объектом, поскольку оба i и j имеют один и тот же физический адрес? – fuyi
i - альтернативная ссылка на объект j. Итак, синоним. Вы, однако, сказали, что не можете использовать «i» для изменения объекта, на который он ссылается. Ничто не говорит, что вы не можете использовать какой-либо другой способ изменения объекта, к которому я обращаюсь. Вы ограничиваете возможности i этим объявлением, а не пытаетесь их расширить, и все в порядке. –
@xiaopang: ''i'' и '' j'' - это имена. Оба они относятся к одному и тому же объекту. Часто мы говорим, что что-то «есть» его имя, или что «это» объект. Например, я могу сказать: «Я Стив». Но это неявная терминология, эти два не одно и то же. Я также могу сказать: «Стив» начинается с капитала «S». Это не означает, что * I * начинается с капитала «S». Кавычки вокруг «Стива» указывают, что я говорю об имени, а не о том, к чему он относится. 'i' и' j' являются синонимами, потому что они оба являются именами для одного и того же объекта, но их свойства как имена разные. –