Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916

Нюансы синтаксиса: использование using

12.08.2016, 11:41. Показов 805. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброе утро, вообщем хотел спросить давно уже, а что делает using, помимо вот такого его применения
C++
1
2
using std::cout;
//...
вот HelicopterK52, преводил в соседней теме
C++
1
2
3
4
5
6
7
8
9
10
struct Base
{
    Base() = default;
    Base(int) {}
};
 
struct Derived : Base
{
    using Base::Base; // унаследовал к-тор
};
ну тут ок, написано в коменте что унаследовали конструктор не будем туда углублятся, но вот допустим пример hoggy
(кусок кода в namespace detail в конце)
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <cassert>
 
enum eCTOR{ eNONE, eVARIADIC, eCOPY, eRVALUE };
 
namespace detail{
    
    // --- предназначен для решения проблемы 
    // вызовов конструкторов в ситуации, 
    // когда любые аргументы проваливаются 
    // в вариадик-конструкторе
    template<class D, class B> class selector
    {
        typedef typename std::remove_reference<
            typename std::remove_reference<D>::type
        >::type
            type1;
            
        typedef typename std::remove_reference<
            typename std::remove_reference<B>::type
        >::type
            type2;
 
        enum { eRVALUE = std::is_rvalue_reference<D>::value };
        
    public:
        enum { eIS_COPY   = std::is_same<type1, type2>::value  };
        enum { eIS_RVALUE = eRVALUE && eIS_COPY                };
        enum { eOTHER     = !eIS_RVALUE && !eIS_COPY           };
    };
 
    template<class D, class B>
        using for_other
            = typename std::enable_if< selector<D,B>::eOTHER>::type*;
    
    
}//namespace detail
 
struct example
{
    template<class A, detail::for_other<A&&, example> = nullptr >
    example(A&& a):m_ctor(eVARIADIC)
        { std::cout <<"variadic\n"; }
 
    example(const example&):m_ctor(eCOPY)
        { std::cout <<"copy\n"; }
    example(example&&):m_ctor(eRVALUE)
        { std::cout <<"rvalue\n"; }
 
    eCTOR m_ctor;
};
 
// что бы поломать компилятору оптимизацию перемещения
// потребуем от компилятора явного перемещения 
// вот так ручное вмешательство 
// иногда только мешает компилятору оптимизировать, хе-хе
example rvalue() {  return std::move(example(10)); }
 
int main()
{
    std::cout <<"hello, world\n";
 
    example ex1(10);
    assert(ex1.m_ctor==eVARIADIC);
 
    // теперь все хорошо
    example ex2 = ex1;
    assert(ex2.m_ctor==eCOPY);
    
    example ex3 = rvalue();
    assert(ex3.m_ctor==eRVALUE);
}
просто из этих кусков я понял что using представляет из себя не то что я о нем думал и вот теперь в недопонимании
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2016, 11:41
Ответы с готовыми решениями:

Нюансы синтаксиса: использование typedef
typedef int(*compare_func)(void* left, void* right); В первых круглых скобках - &quot;*compare_func&quot; новое имя типа, представляющее указатель...

Нюансы синтаксиса: использование объектов типа ofstream
Куда нужно дописать std:: ? #include &lt;iostream&gt; #include &lt;fstream&gt; int main (void){ ofstream file; file.open...

Нюансы синтаксиса: объяснить использование ключевого слова typedef в заданном фрагменте кода
Всем привет. Недавно на просторах интернета столкнулся с таким кодом: typedef double(*pointFunc)(double); double f(double x) { ...

9
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
12.08.2016, 11:43
Это псевдоним типа указателя, который выведет enable_if
1
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
12.08.2016, 11:44
obivan, http://en.cppreference.com/w/cpp/keyword/using
1
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
12.08.2016, 11:47
Цитата Сообщение от obivan Посмотреть сообщение
вот HelicopterK52, преводил в соседней теме
Это не я приводил
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
12.08.2016, 11:50  [ТС]
HelicopterK52, ой перепутал ваш код с Ferrari F1,

вот ваш
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
 
 
struct Base
{
    Base(int){}
};
 
 
struct Derived : Base
{
    using Base::Base;//Наследнование конструкторов
};
 
int main()
{
    Derived x (55);
}
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
12.08.2016, 11:54
obivan, Если по-русски - то using добавляет в данное пространство имен алиас на какой-то тип.
C++
1
2
using type1 = type::type;
using type::type
Если чуть более научно, то using добавляет определенный тип в список использующийся для unqualified lookup.

Цитата Сообщение от obivan Посмотреть сообщение
ну тут ок, написано в коменте что унаследовали конструктор не будем туда углублятся
А вот зря - углубитесь, тут не юзинг главный хлопец на деревне, а гораздо важнее почему при unqualified lookup иногда плюсы не заглядывают в base класс.
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
12.08.2016, 12:05
По простому, using имя; добавляет имя в текущее пространство имен

Добавлено через 9 минут
вот пример от дрофсета
Наследование, счетчик, перегрузка операций: К префиксным операциям нет доступа
1
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
12.08.2016, 13:10  [ТС]
Цитата Сообщение от Nosey Посмотреть сообщение
а гораздо важнее почему при unqualified lookup иногда плюсы не заглядывают в base класс
большое спасибо за наводку, обязательно гляну
1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
12.08.2016, 13:20
Цитата Сообщение от Nosey Посмотреть сообщение
А вот зря - углубитесь
Да-да, при наследовании конструкторов using не меняет видимость имен, как обычно, а по этой команде компилятор генерирует код "унаследованных" конструкторов.
2
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
12.08.2016, 13:45
Цитата Сообщение от Mr.X Посмотреть сообщение
по этой команде компилятор генерирует код "унаследованных" конструкторов.
Точно, я что-то не приметил что в пример был конструктор.

using для конструктора генерирует конструктор с соответствующими параметрами и в списке инициализации вызывает соответствующий base ctor.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2016, 13:45
Помогаю со студенческими работами здесь

Нюансы синтаксиса: чем отличается запись *p += 2 и p += 2 ?
Изучаю библиотеку станд. шаблонов и одно выражение не могу понять. Почему отличается массив при использовании *p += 2 и p += 2 вроде же...

Нюансы синтаксиса C++ - что обозначает запись *=
Здравствуйте, дорогие форумчане. Это, скорее всего, глупый вопрос, но можете объяснить немного использование таких вот идей: ret *= i ...

Нюансы синтаксиса: что означает запись for ( ; ; ) ?
Встретила в программе такую строку: for ( ; ; ) { // some code } Кто может объяснить по какому принципу она работает,...

Нюансы синтаксиса:что значит запись f *= i ?
#include &lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; using namespace std; void main(void) ...

Нюансы синтаксиса: знак ^ и возведение в степень
при t=9949, k=1 и d=(-1) ro=((t &gt;&gt; k) ^ d) каким-то образом выходит (-4974), а при k=0 - (-9949) как это может быть?


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru