Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30

Можно ли для стд::вектор'а взять адрес и-го элемента?

27.11.2014, 19:09. Показов 7964. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим, есть код на Си:

C
int a[10000];
 
__builtin_prefetch (&a[1000]);
/* тут идёт обработка первых 1000 элементов массива [0 - 999] */
 
__builtin_prefetch (&a[2000]);
/* тут идёт обработка первых 1000 элементов массива [1000 - 1999] */
 
/* и так далее */
Что тут происходит? __builtin_prefetch в данном случае - это встроенная конструкция языка GNU C. Но её можно написать и самому, это непринципиально. __builtin_prefetch специальными командами процессора обращается к данным в памяти, реально не читая никаких значений. Делается это для того, чтобы данные из памяти попали в кэш. В тот момент, пока идёт обработка первых 1000 элементов массива, подсистема памяти (параллельно) перекачивает данные из памяти в кэш. И когда мы начнём обработку вторых 1000 элементов, мы уже не будем терять время на чтение данных из памяти. Параллельно вызываем подкачку следующего блока и т.п. Тут всё хорошо

Теперь берём код на Си::

C++
std::vector<int> a (10000);
Есть какая-то возможность получить адрес (но не ссылку, как это делает метод at) нужного нам элемента массива? Или внутри себя массив данных может быть не сплошным, а потому тут полная инкапсуляция и возможности предподкачки попросту нет?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.11.2014, 19:09
Ответы с готовыми решениями:

Реально ли получить из стд::вектора Сишный массив?
Или для этого придётся поэлементно копировать и смысл теряется? Я понимаю, что указатель на память выделяемую вектором спрятан где-то...

как получить адрес элемента вектора посредством g++?
#include &lt;vector&gt; #include &lt;iostream&gt; using namespace std; int main(){ return 0; vector&lt;int&gt; v; v.push_back(2); ...

Взять адрес базы данных для редактирования пути
Доброе время суток. Честно признаюсь в том вопросе что пишу полный ноль и нужна помощь Есть задача создать сайт по военно патриотическому...

43
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
27.11.2014, 19:51
http://en.cppreference.com/w/c... ector/data

C++
1
2
3
4
5
6
7
8
9
    pointer data() _NOEXCEPT
        {   // return address of first element
        return (this->_Myfirst);
        }
 
    const_pointer data() const _NOEXCEPT
        {   // return address of first element
        return (this->_Myfirst);
        }
либо через итератор. -> возвращает также pointer.
C++
1
int* aPtr = a.begin().operator->();
Это имеетсяя в виду? )
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.11.2014, 20:08
Лучший ответ Сообщение было отмечено Убежденный как решение

Решение

Можно:
C++
1
auto* pointer_to_first_element = &myvector[0];
Добавлено через 1 минуту
Цитата Сообщение от Evg Посмотреть сообщение
Или внутри себя массив данных может быть не сплошным, а потому тут полная инкапсуляция и возможности предподкачки попросту нет?

По стандарту Вектор обязан держать внутри себя непрерывный блок памяти.
Поэтому, можно смело воспринимать этот кусок как обычный сишный массив.
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
27.11.2014, 20:10
C++03
23.2.4 Class template vector

1. A vector is a kind of sequence that supports random access iterators.
In addition, it supports (amortized) constant time insert and erase operations at the end;
insert and erase in the middle take linear time. Storage management is handled automatically,
though hints can be given to improve efficiency. The elements of a vector are stored
contiguously, meaning that if v is a vector<T, Allocator> where T is some type other
than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size().
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.11.2014, 20:50  [ТС]
Из чтения описания http://www.cplusplus.com/refer... r/operator[]/ я понял, что "reference" (в описании прототипа) - это ссылка (т.е., грубо говоря, int&, а не int*). Ковыряние в препроцессированном файле вроде бы тоже об этом говорит. Но если сие можно записать в указатель (см. пост #3), то это не ссылка. А что тогда?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.11.2014, 20:55
Цитата Сообщение от Evg Посмотреть сообщение
А что тогда?
Ссылка и есть.

Осталось понять: что же такое, эта ссылка?

Ссылка на языке с++ - это тип данных, который не обладает идентичностью.
Грубо говоря, ссылка - псевдоним некого оригинального объекта, и любые действия над ссылкой - есть действие над этим оригинальным объектом.

Поэтому, ссылки - это единственный тип данных на языке, у которых не существует объекта.

Вы не сможете взять адрес ссылки, потому что попытка взять адрес ссылки - это взятие адреса на самом деле у оригинального объекта.

У самой же ссылки адреса просто не существует.

Поэтому, когда мы делаем так:

C++
1
auto* ptr = &myvec[index];
запись разворачивается:

C++
1
2
auto& ref = &myvec[index];
auto* ptr = &ref;
И здесь происходит взятие адреса оригинального объекта, который по факту существует в контейнере.
То бишь мы получаем адрес объекта, который существует в непрерывном блоке памяти вектора.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.11.2014, 21:02  [ТС]
Давай-ка чтобы не лезть в С++-11 остановимся на нормальном С++, в котором нет auto. Я так и не понял, с чего бы это вдруг

C++
1
int *p = &a[0];
превращается в

C++
1
2
int &tmp = &a[0]; /* это я понимаю */
int *p = &tmp; /* это не понимаю вообще никак */
и почему это работает?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.11.2014, 21:16
Нет, не так.

Смотрите:

C++
1
int *p = &a[0];
превращается в:

C++
1
2
int& r = a[0];
int *p = &r;
переменная p содержит адрес первого элемента контейнера a


Действия над ссылкой - это на самом деле действие над оригинальным объектом.
То есть, попытка взять адрес у r это взятие адреса у a[0]

Добавлено через 9 минут
или вот такой пример:

есть обычный сишный массив:

C++
1
int arr[]={1,2};
Мы можем считать, что массив содержит несколько обособленных идущих непрерывно друг за другом объектов.

Но мы не знаем имен этих объектов. Мы знаем только имя их контейнера-держателя.
Поэтому, мы не можем обратиться к элементу по его имени. А можем только через имя массива.

Ссылка - это псевдоним, алеас, альтернативное имя объекта:

C++
1
2
3
4
5
6
7
8
int& r = arr[1];  //<--- сообщаем компилятору, что наделяем 2й элемент массива именем r
 
r = 10; //обратились к объекту по имени, и изменили значение. Теперь a[1] равен 10
 
int* p = &r; // взяли адрес у объекта. Взяли адрес у объекта a[1]
 
 
int* pp = &arr[0]; //взяли адрес у объекта a[0]
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.11.2014, 21:19  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
Нет, не так
У меня написано то же самое Но я на самом деле понял. Далее поясняю для тех, кому это место вдруг окажется непонятным.

Любое обращение к ссылке (который на уровне кода есть указатель) всегда означает неявное разыменование этого самого скрытого указателя: Сравнение указателей и ссылок.. В примере с взятием адреса на ссылку происходит ровно то же самое. Только пример возьму совсем простой:

C++
1
2
3
4
int x;
int &array = x; /* имитируем возвращаемую оператором [] ссылку */
int *ptr = &array;
printf ("%p %p\n", &x, ptr); /* значение указателя p равно адресу x */
эквивалентно

C
1
2
3
4
int x;
int * const array = &x; /* ссылка есть скрытый указатель */
int *ptr = &(*array); /* любое обращение к ссылке есть разыменование скрытого указателя */
printf ("%p %p\n", &x, ptr); /* значение указателя p равно указателю array, который равен адресу x */
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.11.2014, 21:30
Цитата Сообщение от Evg Посмотреть сообщение
Любое обращение к ссылке (который на уровне кода есть указатель)
На самом деле это не верное утверждение.

Ссылка - псевдоним имени объекта.
И хотя в большинстве случаев компиляторы реализуют механизм ссылки через механизм указателей, они не обязаны этого делать.

Во многих случаях компилятор может сделать inline подстановку оригинального объекта по всем тем местам, где используется ссылка, и вообще "физически" не создавать объект для ссылки.

Опять таки, у ссылок и указателей слишком уж разные свойства.


Пример:

Что будет, если взять размер указателя?

C++
1
cout<< sizeof(ptr)<< endl;
А что будет, если взять размер ссылки?

C++
1
cout<< sizeof(ref)<< endl;
В первом случае размер любого указателя всегда фиксирован в рамках одной платформы и не зависит от типа объекта на который этот указатель указывает.

Но поскольку любые действия над ссылкой есть действие над оригинальным объектом, то попытка взять размер ссылки - это попытка взять размер оригинального объекта.
Поэтому, sizeof(reference) будет развен sizeof(типа оригинального объекта).

А ещё не бывает "константных ссылок".

В принципе не бывает.

C++
1
2
cout<< ::std::is_const<const some&>::value<<endl; //всегда будет false
cout<< ::std::is_const<some&>::value<<endl; //всегда будет false
В отличии от указателей, typeid(ссылка) будет равен typeid(тип оригинального объекта)
...

В целом поведение ссылок и указателей настолько различается, что лучше воспринимать их как принципиально разные сущности. И не воспринимать ссылку как "указатель, который автоматически разыменовывается"
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.11.2014, 22:09  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
На самом деле это не верное утверждение
Просьба привести пример, когда ссылка на уровне кода НЕ есть указатель. Варианты со всякими инлайнами и оптимизациями не в счёт, потому что это резельтат работы оптимизаций, а не результат какой-то иной трактовки ссылки при построении кода

Цитата Сообщение от hoggy Посмотреть сообщение
Поэтому, sizeof(reference) будет развен sizeof(типа оригинального объекта)
Это и есть ровно то, о чём я говорил. Обращение к ссылке эквивалентно разыменованию скрытого указателя (которому эквивалентна ссылка).

Цитата Сообщение от hoggy Посмотреть сообщение
А ещё не бывает "константных ссылок"
Исключительно вопрос терминологии. Данный код не будет компилироваться. Убери const - и всё будет нормально

C++
int x;
const int &ref = x;
ref = 0;
Цитата Сообщение от hoggy Посмотреть сообщение
В целом поведение ссылок и указателей настолько различается, что лучше воспринимать их как принципиально разные сущности
Я не пытался отождествить ссылку и указатель. Я всего лишь привёл примеры-аналогии для понимания работы ссылки. Чтобы понять как работает ссылка, можно посмотреть пример-аналог с указателем. И работать будет именно так и никак по другому

Цитата Сообщение от hoggy Посмотреть сообщение
И не воспринимать ссылку как "указатель, который автоматически разыменовывается"
Почему? Если все переменные-ссылки на уровне текста заменить на разыменованные скрытые указатели (которому эквивалентна ссылка), то получим ровно симметричный код. Я говорю о коде, который выполняет физически реальные действия, а не всякое типа is_const, typeid и прочее
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.11.2014, 23:53
Цитата Сообщение от Evg Посмотреть сообщение
Просьба привести пример, когда ссылка на уровне кода НЕ есть указатель
Что вы имеете ввиду под словосочетанием "на уровне кода" ?

Потому что, когда я говорю о языке с++, то я имею ввиду именно с++ код.
Я подразумеваю синтаксис с++.

Не ассемблер, и не машинный код.

Ну так вот на уровне с++ кода - ссылка не есть указатель.
Разное поведение.
Разные свойства.
Разные правила игры.

Цитата Сообщение от Evg Посмотреть сообщение
Это и есть ровно то, о чём я говорил. Обращение к ссылке эквивалентно разыменованию скрытого указателя (которому эквивалентна ссылка).
Это не одно и тоже.
Потому что sizeof не обращается к объекту. Он вообще не работает с объектами.
Он работает с типами. Поведение с указательным типом - одно. С ссылочным - другое.

И здесь аналогия "ссылка, как указатель" уже не работает.

Цитата Сообщение от Evg Посмотреть сообщение
Исключительно вопрос терминологии. Данный код не будет компилироваться. Убери const - и всё будет нормально
Ну вообще то да.

Если не считать маленького нюанса: ссылка, это псевдоним имени оригинального объекта. Она обладает именем. А имя может обладать квалификатором, определяя можно ли через это альтернативное имя изменить объект, или нет.

Но при этом ссылка не обладает идентичностью: имя у ссылки есть, а объекта нету.

Указатели могут быть const, могут иметь реальные полноценные объекты, которые реально занимают место в памяти. И мы всегда можем получить адрес по которому живет объект-указатель.

Ссылки имеют только имена, но не имеют объектов.

(с точки зрения закулисной кухни компилятора конечно могут иметь, но они все равно не доступны для программиста с++ законными способами).

Цитата Сообщение от Evg Посмотреть сообщение
Чтобы понять как работает ссылка, можно посмотреть пример-аналог с указателем. И работать будет именно так и никак по другому
Насчет "именно так, и никак по другому" - не факт. Компиляторы не обязаны делать это через указатель.
Стандарт не накладывает ограничений.
Главное, что бы они реализовали правила поведения "альтернативного имени объекта".
А как именно это будет реализовано на низком уровне - стандарту не принципиально.

Обращение к функции-члену через ссылку правильнее воспринимать, как обращение к функции-члену через оригинальное имя объекта.

Цитата Сообщение от Evg Посмотреть сообщение
Почему? Если все переменные-ссылки на уровне текста заменить на разыменованные скрытые указатели (которому эквивалентна ссылка), то получим ровно симметричный код.
Покажите мне пожалуйста ваш ровно-симметричный код, заменив ссылку на указатели:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    template<class T> struct support_sstream
    {
        typedef char (&No)[1]; typedef char (&Yes)[2];
 
        template<class U> static U& ref();
        template<class U> static U  val();
 
        #ifdef _MSC_VER
        template<class U>
            static Yes HelpMe( decltype( ref<::std::stringstream>() << val<U>()  )*  );
        #else
        template<class U>
            static Yes HelpMe(char(*)[sizeof(ref<::std::stringstream>() << val<U>())]);
        #endif
 
        template<class U>
            static No HelpMe(...);
 
        enum { value = sizeof(HelpMe<T>(0)) == sizeof(Yes) };
    };
Использование такое:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
struct some{};
struct rabbit{};
 
::std::sstream& operator<< (::std::stringstream& ss, const rabbit&) { return ss; }
 
struct rabbit1
{
    template<class T> friend T&
           operator<<(T& os, const rabbit1&){ return os; }
};
 
int main()
{
    std::cout << "Hello, world!\n";
    std::cout << "can cout<<int(1) ? (must be true): "<< support_sstream<int>::value<<std::endl;
    std::cout << "can cout<<float(1.0f) ? (must be true): "<< support_sstream<float>::value<<std::endl;
 
    some s;
    std::cout << "can cout<< s ? (must be false): "<< support_sstream<some>::value<<std::endl;
 
    rabbit r;
    std::cout << "can cout<< r ? (must be true): "<< support_sstream<rabbit>::value<<std::endl;
 
    rabbit1 r1;
    std::cout << "can cout<< r1 ? (must be true): "<< support_sstream<rabbit1>::value<<std::endl;
 
}
/зы На языке с++ ссылка означает гораздо больше, чем может подумать человек, который пишет на "си с классами".

Добавлено через 8 минут
Цитата Сообщение от Evg Посмотреть сообщение
Я говорю о коде, который выполняет физически реальные действия, а не всякое типа is_const, typeid и прочее
Между указателем и ссылкой есть принципиальные различия.

Между разыменованным указателем и ссылкой разницы нет.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
27.11.2014, 23:59
Цитата Сообщение от Evg Посмотреть сообщение
Исключительно вопрос терминологии.
Мне кажется, он говорил не об этом. Константных ссылок, т.е. вот такого:
C++
1
int & const ref = x; // обрати внимание где стоит const
не бывает потому, что ссылка подразумевает эту константность по-умолчанию. Потому что нельзя переназначить ссылку на другой объект.

Цитата Сообщение от Evg Посмотреть сообщение
Просьба привести пример, когда ссылка на уровне кода НЕ есть указатель.
Это может происходить тогда, когда определение оригинального объекта доступно в той же единице трансляции. Пример я приводил здесь.

Цитата Сообщение от Evg Посмотреть сообщение
Почему?
Потому что ссылка - это высокоуровневое понятие С++. Стандарт не накладывает никаких требований на реализацию ссылки и не предполагает ее явной эквивалентности указателю. Поэтому это, как говорится, implemetation-defined.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
28.11.2014, 00:10
Цитата Сообщение от DrOffset Посмотреть сообщение
не бывает потому, что ссылка подразумевает эту константность по-умолчанию. Потому что нельзя переназначить ссылку на другой объект.
Потому что не существует объекта, который можно было бы изменить, или нельзя было бы изменить.

У указателя есть объект, который наделяет имя идентичностью.
Поэтому для указателя критично - можем ли мы изменить сам объект, хранящий адрес, или не может.

Ссылка - просто это другое имя. Собственного объекта у неё нет.
Нельзя изменить то, чего нет. Константность теряет смысл.

Критично только, можем ли мы по этому альтернативному имени изменить оригинальный объект или нет.
Но это тоже самое что и с указателем: можно ли через него изменить объект, на который он ссылается.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
28.11.2014, 00:15
Цитата Сообщение от hoggy Посмотреть сообщение
У указателя есть объект, который наделяет имя идентичностью.
Поэтому для указателя критично - можем ли мы изменить сам объект, хранящий адрес, или не может.
Ссылка - просто это другое имя. Собственного объекта у неё нет.
Нельзя изменить то, чего нет. Константность теряет смысл.
Критично только, можем ли мы по этому альтернативному имени изменить оригинальный объект или нет.
Но это тоже самое что и с указателем: можно ли через него изменить объект, на который он ссылается.
Совершенно верно. Я в этой теме тебя полностью поддерживаю. Главное, чтобы теперь твою мысль понял Evg
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
28.11.2014, 10:19  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
Что вы имеете ввиду под словосочетанием "на уровне кода" ?
Имел в виду на уровне машинного кода. И далее приводил код на языке, который бы соответствовал машинному коду по своей работе

Ты можешь сколько угодно объяснять незнающему человеку в терминах синонимов, и у него нормального понимания не будет. Объясни один раз через эквивалент с указателями, и человек всё поймёт. Сразу глубину смысл может и не прочувствует, но принцип работы поймёт. Причём на практике проверено многократно

Если что - я знаю, что такое ссылка. Пример в посте 9 - это объяснение для тех, кто не знает или плохо понимает. И с большой вероятностью они поймут, как отработал такой код. При этом я сам, понимая, что такое ссылка, с большим трудом понял объяснения из комментариев #6 и #8. Моим приоритетом было доступное объяснение. Я почти не программирую на Си++, а потому у меня немного сломался моск на операции взятия адреса от a[] (где [] был оператором), собственно только потому я об этом и спросил

Цитата Сообщение от DrOffset Посмотреть сообщение
Мне кажется, он говорил не об этом. Константных ссылок, т.е. вот такого:
Я и говорил, что тут вопрос терминологии (то бишь, что подразумевать под понятием "константная ссылка")

Цитата Сообщение от hoggy Посмотреть сообщение
Компиляторы не обязаны делать это через указатель
Только других способов нет. Может быть, когда изобретут квантовые компьютеры с иными принципами работы, что-то может и поменяется. И при всём этом принцип построения ссылки скорее всего останется таким же, как и построение указателя

Цитата Сообщение от hoggy Посмотреть сообщение
Покажите мне пожалуйста ваш ровно-симметричный код, заменив ссылку на указатели
У меня нет практики программирования на Си++, мне даже без аналогий сложно вкурить в подобные конструкции. При этом я не вижу ни одного материального использования ссылок. Но по крайней мере понял, что ты подразумевал под инлайном. Я не знаю, как это по умному называется, но тут в компиляторе что-то типа инлайна без реального наличия промежуточного представления. Аналог оператора sizeof(a[10]), когда компилятор строит константу, не строя код для вычисления выражения в скобках (т.е. нету материального тела для того, что стоит в скобках). Насколько я понимаю, в твоём примере всё то же самое. А потому ещё раз хочу подчеркнуть: я пытаюсь объяснить принцип работы с ссылками, опираясь на эквивалентный по смыслу код работы с указателями. Я НЕ пытаюсь их отождествить

Цитата Сообщение от hoggy Посмотреть сообщение
Между разыменованным указателем и ссылкой разницы нет
Ну дык изначально же было сказано, что ссылка по своему действию - это разыменованный константный указатель

Цитата Сообщение от DrOffset Посмотреть сообщение
Это может происходить тогда, когда определение оригинального объекта доступно в той же единице трансляции. Пример я приводил здесь
Там показано следствие работы оптимизаций, а не принципы построения ссылки. Ты привёл два НЕэквивалентных примера (ссылка эквивалентна константному указателю, а у тебя неконстантный). У меня нет компилятора, чтобы дословно повторить твой код. Без оптимизаций мой компилятор выдаёт совсем не то, что у тебя, а с оптимизациями - работы через ссылку и указатель построили одинаковый код

Цитата Сообщение от DrOffset Посмотреть сообщение
Главное, чтобы теперь твою мысль понял Evg
Я понимаю мысль и твою, и hoggy. И ещё раз говорю о том, что эквивалентность ссылки и постоянно разыменованного константного указателя вводится для того, чтобы начинающий нормально понял, как это работает. С объяснениями через синонимы и абстракции вы за разумное время не добьётесь того, чтобы человек понял, что такое ссылка
0
Заблокирован
28.11.2014, 11:32
Цитата Сообщение от википедия
Разыменование ссылок в C++
не требует специального оператора. Таким
образом, в C++ ссылки — форма передачи
адреса в стек напрямую, минуя копирование и
указатели. При компилировании все ссылки на
объект и его именем заменяются одним номером
этого объекта.
...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
28.11.2014, 11:57  [ТС]
maritux, все участники разговора прекрасно знают, что такое ссылка. Если что
0
Заблокирован
28.11.2014, 12:50
Evg, что ссылка в С++ - это не просто запись со значком & в коде программы, а еще и механизм передачи адреса от обьекта в память. И для разных обьектов этот механизм внутри программы будет отличаться.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
28.11.2014, 19:46
Цитата Сообщение от Evg Посмотреть сообщение
Там показано следствие работы оптимизаций, а не принципы построения ссылки.
Это настолько тесно связано в современных компиляторах, что различать это не вижу смысла.
Кстати именно об этом я и писал в том посте. Компилятор исходит из семантики ссылки и делает определенные оптимизации.
Естественно, если мы сделаем адрес константным, то результирующий код будет полностью одинаковым.

На самом деле, раз тебе понятно, о чем была речь, то я не вижу дальше продолжать этот разговор. Т.к. специалист с опытом, в принципе, имеет право на свою точку зрения и толкование определенных вещей. Просто рассуждения hoggy и твои находятся в разных плоскостях. Это как спор физика и математика об одних и тех же процессах (между прочим реальный пример), оба правы, но к общему мнению никак не придут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.11.2014, 19:46
Помогаю со студенческими работами здесь

дан вектор А (N). написать программу нахождения минимального элемента вектора и его индекса. если индекс элемента парный, то часть вектора перед миним
дан вектор А (N). написать программу нахождения минимального элемента вектора и его индекса. если индекс элемента парный, то часть вектора...

Где можно взять ftp-компонент, для того чтобы можно было закачивать со своего скрипта на фтп-сервак файлы?
Народ подскажите где можно взять ftp-компонент, для того чтобы можно было закачивать со своего скрипта на фтп-сервак файлы.

Произведение наименьшего элемента вектора Х и наибольшего элемента вектора Y.
Произведение наименьшего элемента вектора Х и наибольшего элемента вектора Y. размер векторов x и y одинаков и равен n. Прошу, помогите!

Произведение наименьшего элемента вектора Х и наибольшего элемента вектора Y
Произведение наименьшего элемента вектора Х и наибольшего элемента вектора Y. Добавлено через 26 минут Размер векторов одинаков и...

Заменить минимальное значение элемента вектора С размерности p на значение первого положительного элемента этого же вектора
Доброго всем здравия! Собственно задачка следующего порядка: &quot;Заменить минимальное значение элемента вектора С размерности p на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru