Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

В каких случаях при Инициализации переменной ставится = () и {} в C++?

top tankist Ученик (22), открыт 2 дня назад
В каких случаях при Инициализации переменной ставится = () и {} в C++?
4 ответа
kaiu Высший разум (120142) 2 дня назад
Вот смотри. Сегодня выходной...а лень же двигатель прогресса, значит программисты спросят у ИИ, а не будет много так набирать. И вообще, если охота, то напиши статью на хабр какой-то...а может такая там уже есть. А тут если и скажут, то тоже от ИИ, а развернутый ответ долго писать.
kaiuВысший разум (120142) 2 дня назад
kaiu Высший разум (120142) kaiu,
Николай Веселуха Высший разум (379554) 2 дня назад
 #include <iostream> 
#include <span>
#include <vector>

using namespace std;

void show(const span<int>& s) {
for (const auto v : s) cout << v << ' ';
cout.put('\n');
}

int main() {
vector<int> a(5);
show(a);
vector<int>b{5};
show(b);
}
P.S. Почувствуйте разницу
top tankistУченик (22) 2 дня назад
Ээээ ааа аааа нууу.... Да
Егор Падерин Мастер (1184) 2 дня назад
= это знак присваивания, если ты создаешь переменную и присваиваешь через =, то сначала она создается без значения, и только потом ей оно присваивается, т.е. к примеру vector, если мы не укажем аргументы через(), то он создастся пустым и при присваивании = просто присвоит себе значение. Если мы укажем вектору что то через (), то это аргументы, у разных типов данных они разные, у вектора мы можем написать, сколько в нем будет заполнено элементов и чем, в string можно указать строку, которая присвоится как через =, можно так же заполнить string определенным кол-вом какого то символа. через {} передается список инициализации, тот же пример с вектором, мы создали его и передали через {} какой то список элементов, вектору присвоятся его значения. Так же можно в функции, которая возвращает вектор или pair или tuple вместо явного создания элемента для возвращения и заполнения его просто написать return {}; и в скобках указать список нужных элементов, к примеру для pair: return {a, b};, может я где то ошибся и не все дорассказал, но примерно так
top tankistУченик (22) 2 дня назад
Бро, мои познания в с++ оканчиваются 30 минут на метаните и какими то попытками 3 года назад. Я ошибок не замечу)
Moon Late Гуру (2883) 1 день назад
Это один из древних приколов С++. Из-за того, что в ядре языка были оставлены старые способы инициализации, появилась вот такая вот каша. Единых правил нет. Допускается как =, так и () или {}. Например:
 class A { 
public:
A(int x): value(x) { }
private:
int value;
};
и все три варианта могут работать:
 A a1(0), a2{5}, a3 = 7; 
Однако, есть тонкости. Например, перегрузка оператора = или конструкторы копирования. Да, это еще одна cpaнь господня, которая была введена для усложнения жизни погромистам :)
Например, пример для примера:
 class A { 
public:
A(int x): value(x) { }

/* конструктор копирования */
A(const A& other)
{
value = -other.value;
}

/* перегрузка оператора = */
A& operator =(const A& other)
{
value = -other.value;
return *this;
}

private:
int value;
};
и вот как можно например с этим примером:
 A a1(10); 
A a2 = a1;
A a3 = 7;
A a4{a1}, a5(a1);
A a6 = a2 = a3 = a1;
Похожие вопросы