88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
1

Внутриклассовая инициализация в фигурных скобках

16.04.2016, 12:38. Показов 3302. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, чем отличается списочная инициализация от прямой пользовательского класса с одним стандартным конструктором и одним пользовательским конструктором?
В частности почему при внутриклассовой инициализации можно использовать только списочную инициализацию для объекта класса?
C++
1
2
3
4
5
6
7
8
9
10
class A {
    int i, j;
public:
    A() = default;
    A(int j, int k) : i(j), j(k) {}
};
 
class B {
    A x{ 23, 44 }; // списком можно, а в круглых скобках нельзя, почему?
};
Вот пример из книги (переопределяем для multiset функцию сравнения)
C++
1
2
3
4
5
6
7
bool compare(const shared_ptr<Quote> &lhs, const shared_ptr<Quote> &rhs) {
    return lhs->isbn() < rhs->isbn();
}
 
class Basket {
    multiset<shared_ptr<Quote>, bool(*)(const shared_ptr<Quote>&, const shared_ptr<Quote>&)> items{ compare };
};//                    только фигурные скобки для инициализации items
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2016, 12:38
Ответы с готовыми решениями:

Выдает ошибку в последних двоих фигурных скобках
Выдает ошибку в последних двоих фигурных скобках #include &lt;stdio.h&gt; #include &lt;time.h&gt; #include...

Доработки поиска в фигурных скобках
Здравствуйте, написал небольшую регулярку для поиска внутри фигурных скобок { } var string =...

Только цифры в {фигурных скобках}
Знаю что для цифр вот так: preg_replace('//', '', $string); не могу дописать чтобы он их в...

Что означают get и set в фигурных скобках?
Например есть класс, внутри описываются поля: public class TournirInfo0 { public int...

2
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
16.04.2016, 16:39 2
Цитата Сообщение от yrceus Посмотреть сообщение
в круглых скобках нельзя, почему?
Неоднозначность с синтаксисом объявления функции.
Скобки итак перегружены контекстом. Вспомнить хотя бы удивительную для многих особенность most vexing parse.
Небольшой пример:
C++
1
2
3
4
5
6
7
8
class B
{
    A x(int(), int()); // что это? 
                       // конструирование объекта x типа A с инициализацией
                       // двумя rvalue типа int со значениями по-умолчанию (0)? 
                       // или это объявление функции x, которая возвращает A 
                       // и принимает два безымянных аргумента-указателей на функцию, возвращающую int?
};
Так что ситуация такова, что в случае с круглыми скобками x - это функция класса B. А с фигурными - объект x, с инициализацией двумя нулями.
1
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
16.04.2016, 17:14  [ТС] 3
Ага, понял! Спасибо!!! Ссылка отличная, спасибо, запомню
0
16.04.2016, 17:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2016, 17:14
Помогаю со студенческими работами здесь

Почему массив точек задается в фигурных скобках
PointF point= new PointF { v, v, v, v }; Объясните, пожалуйста, мне что значит в фигурных скобках...

Регулярное выражение для символов в фигурных скобках
Добрый день, форумчане. Ищу строку {%x%}, где x один или несколько символов. \{%]*\%} Моё...

Расхождение в открывающих-закрывающих фигурных скобках php
Здравствуйте, помогите найти недостающие, лишние фигурные скобки в коде. if(empty($_COOKIE) or...

Распарсить txt файл и получить текст в фигурных скобках
Есть текстовый файл вида: #This configuration file was written by:...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru