Форум программистов, компьютерный форум CyberForum.ru

Оператор взятия адреса - C++

Восстановить пароль Регистрация
 
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
01.11.2015, 01:26     Оператор взятия адреса #1
Доброй ночи,

оператор взятия адресса не перечислен среди Special member functions, но он реализуется компилятор по умолчанию, если его не реализовать явно.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
class A
{
};
class B
{
public:
    B* operator&()
    {
        cout << "Override operator&" << endl;
        return this;
    }
};
int main()
{
    A a;
    B b;
 
    &a;
    &b;
}
Собственно, что заставляет компилятор делать это если стандарт молчит
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.11.2015, 01:45     Оператор взятия адреса #2
просто надо меньше париться и читать всякие стандарты. какая разница, что там написано про взятие адреса?
DrOffset
6450 / 3824 / 885
Регистрация: 30.01.2014
Сообщений: 6,618
01.11.2015, 02:44     Оператор взятия адреса #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
rikimaru2013,
Вот аналогичный вопрос: http://stackoverflow.com/questions/2...mber-functions
Внутри есть ссылка на Мейерса:
A class declaring no operator& function(s) does NOT have them implicitly declared. Rather, compilers use the built-in address-of operator whenever "&" is applied to an object of that type. This behavior, in turn, is technically not an application of a global operator& function. Rather, it is a use of a built-in operator.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
01.11.2015, 09:36     Оператор взятия адреса #4
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Собственно, что заставляет компилятор делать это если стандарт молчит
в стандарте есть такое:
The meaning of the operators =, (unary) &, and , (comma), predefined for each type, can be changed for specific class and enumeration types by defining operator functions that implement these operators.
Yandex
Объявления
01.11.2015, 09:36     Оператор взятия адреса
Ответ Создать тему
Опции темы

Текущее время: 05:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru