Вопросы по теме 'list-initialization'
Равномерная инициализация производного класса с тривиальным ctor
Я пытаюсь обдумать некоторые угловые случаи с униформной инициализацией С++ 11, и я не могу понять, почему это так:
struct Base
{
int x,y,z;
};
struct Derived : Base
{
};
static_assert (std::is_trivial<Base>::value, "Base must be...
1491 просмотров
schedule
22.03.2024
Почему я не могу инициализировать структуру, полученную из другой структуры?
Когда я запускаю этот код:
struct X {
int a;
};
struct Y : public X {};
X x = {0};
Y Y = {0};
Я получил:
error: could not convert ‘{0}’ from ‘<brace-enclosed initializer list>’ to ‘Y’
Почему инициализация скобок работает...
12338 просмотров
schedule
31.07.2022
Почему инициализация списка (с использованием фигурных скобок) лучше, чем альтернативы?
MyClass a1 {a}; // clearer and less error-prone than the other three
MyClass a2 = {a};
MyClass a3 = a;
MyClass a4(a);
Почему?
196279 просмотров
schedule
01.03.2022
Почему Foo({}) вызывает Foo(0) вместо Foo()?
Исполняемые файлы, созданные clang 3.5.0 и gcc 4.9.1 из кода
#include <iostream>
struct Foo
{
Foo() { std::cout << "Foo()" << std::endl; }
Foo(int x) { std::cout << "Foo(int = " << x << ")" <<...
1211 просмотров
schedule
01.10.2022
Сужение преобразования в bool при инициализации списка - странное поведение
Рассмотрим этот фрагмент кода C++11:
#include <iostream>
struct X
{
X(bool arg) { std::cout << arg << '\n'; }
};
int main()
{
double d = 7.0;
X x{d};
}
При инициализации x происходит сужающее преобразование...
2916 просмотров
schedule
16.10.2022
инициализация списка копирования по сравнению с инициализацией прямого списка временных
Учитывая следующую структуру:
struct ABC
{
ABC(){cout << "ABC" << endl;}
~ABC() noexcept {cout << "~ABC" << endl;}
ABC(ABC const&) {cout << "copy" << endl;}
ABC(ABC&&) noexcept {cout...
617 просмотров
schedule
17.06.2023
Можно ли использовать синтаксис инициализации скобок C++11, чтобы избежать объявления тривиальных конструкторов для простых агрегатов?
Допустим, у меня есть следующий код:
#include <vector>
struct Foo
{
int tag = 0;
std::function<void ()> code;
};
int main()
{
std::vector<Foo> v;
}
И теперь я хочу добавить новый элемент Foo в вектор с...
1589 просмотров
schedule
10.07.2023
Многомерный список инициализаторов, заключенный в фигурные скобки, в мультивектор
То, что я хочу, - это возможность генерировать матрицу 5x5 с помощью списка инициализаторов, заключенного в фигурные скобки. Чтобы потом это выглядело так:
enum class MyListType {
EMPTY,
A
};
auto matrix = {
{MyListType::EMPTY,...
334 просмотров
schedule
18.01.2023
Формы инициализации списка
См. следующий код:
std::vector<int> v1{1, 2, 3};
std::vector<int> v2 = {1, 2, 3};
Мои вопросы:
Есть ли разница между ними? Я знаю, что первое должно быть инициализацией списка, но как насчет второго?
Поскольку для...
664 просмотров
schedule
25.07.2022
Как передать список инициализации в скобках конструктору `std::array`?
Можно ли передать точный список инициализации в скобках конструктору std::array ? Это может быть необходимо, поскольку std::array не поддерживает назначение списка инициализаторов.
Попытка адаптировать принятый ответ на этот вопрос: Как...
196 просмотров
schedule
08.06.2024
void{} vs void() в качестве инициализатора void
Конструкцию void() можно использовать для «создания значения типа void » (странно, но факт). Но синтаксис инициализации C++11+ с фигурными скобками в таком случае не работает:
int f_int_parenthesis()
{
return int(); // OK
}
int...
97 просмотров
schedule
03.12.2022
Почему инициализация скобок C++ не поддерживается для агрегатов с закрытыми членами?
По моему мнению, следующее концептуально не нарушает конфиденциальность. Но это запрещено.
struct A
{
int a;
int b;
int c;
};
struct B
{
int a;
int b;
private:
int c;
};
int main (int argc, char *...
631 просмотров
schedule
31.08.2022
Инициализация списка C++ допускает несколько определяемых пользователем преобразований
Я читал этот ответ , в котором есть следующий пример:
struct R {};
struct S { S(R); };
struct T {
T(const T &); //1
T(S); //2
};
void f(T);
void g(R r) {
f({r});
}
Ответ связан со старой версией [over.best.ics]/4,...
180 просмотров
schedule
09.09.2023
C++: особенности рассмотрения, но не вызова конструкторов
На cppreference об инициализации списка во втором намерении (для копирования-списка- инициализация) он говорит:
copy-list-initialization (рассматриваются как явные, так и неявные конструкторы, но могут вызываться только неявные конструкторы)...
131 просмотров
schedule
03.08.2023
Проблема с вызовом шаблона функции с переменным числом аргументов при передаче аргументов списка инициализатора скобок
Рассмотрим этот шаблон функции:
template <class... T>
void foo (std::tuple<T, char, double> ... x);
Этот вызов работает:
using K = std::tuple<int, char, double>;
foo ( K{1,'2',3.0}, K{4,'5',6.0}, K{7,'8',9.0} );...
590 просмотров
schedule
16.01.2023
Скобки вокруг скалярного инициализатора при использовании массива структуры в структуре
Я пытаюсь сделать простое меню. Для этого я хочу использовать структуру, которая является меню и содержит массив структур пунктов меню.
Главное меню - Программы - Настройки
Пункты меню содержат некоторую дополнительную информацию, такую как...
158 просмотров
schedule
04.07.2023
Разница между S () и S {}?
В приведенном ниже коде есть ли разница между двумя присвоениями значения? В обоих случаях будет ли value.v создан по умолчанию, а x будет инициализирован равным 42?
struct S
{
std::vector<int> v;
int x = 42;
};
S value;
void foo()...
1199 просмотров
schedule
25.08.2022
Как работает эта подобная списку инициализация?
Я знаю о нескольких типах инициализации в C++ и недавно узнал, почему альтернативы">предпочтительна инициализация списка . Но как насчет этого кода? демонстрация
#include <iostream>
#include <string>
class A {
public:
A(int...
31 просмотров
schedule
18.10.2022
Почему мы не можем опустить емкость переменной-члена типа массива со списком инициализаторов по умолчанию в современном C++?
В современном C++ переменные-члены могут быть явно инициализированы. Однако, хотя мы можем опустить емкость массива при определении локального массива в функции со списком инициализаторов, мы не можем опустить емкость члена массива, даже если у него...
45 просмотров
schedule
26.09.2022
Как передать список инициализаторов, заключенных в фигурные скобки, в функцию?
Я хочу написать функцию, которую можно использовать с аргументом, который в противном случае мог бы возникнуть непосредственно в цикле на основе диапазона:
template <typename Iterable>
void sayIt(const Iterable& stuff) {
for (const...
363 просмотров
schedule
09.04.2022