Size: a a a

2021 March 02

D

Danya in supapro.cxx
Nastya Medveda
Подскажите, пожалуйста, почему одна и та же конструкция декларирует переменную, но инициализирует объект класса/структуры?
Почему они ведут себя по-разному?
#include <iostream>

struct Answerer {
   int theAnswer {42};
};

int main(int argc, const char * argv[]) {
   int declaratedInt; //variable declaration
   
   Answerer answerer; //class object declaration?
   
   // No it is not -- the class is already initialized:
   std::cout << answerer.theAnswer << std::endl;
   return 0;
}
Когда ты создаёшь объект класса, он автоматически инициализируется
источник

FS

Flower Surgeon in supapro.cxx
Nastya Medveda
а, то есть происходит определение класса, в котором инициализируется переменная?
источник

LA

Liber Azerate in supapro.cxx
Даа, кинуть на инициализацию, которую в деталях знает полтора человека... Сильно
источник

FS

Flower Surgeon in supapro.cxx
Liber Azerate
Даа, кинуть на инициализацию, которую в деталях знает полтора человека... Сильно
Всё же проще, чем стандарт читать.
источник

IZ

Ilia Zviagin in supapro.cxx
Ну, не совсем так уж автоматически, но ЗДЕСЬ он инициализирован, причём не автоматически — для этого написан определённый код.

А переменная типа int НЕ инициализирована, инициализации нет никакой. Тут будет  дефолтная, которая для auto-класса памяти отсутствует.
источник

D

Danya in supapro.cxx
Nastya Medveda
это же декларация, нет?
Декларация — это говорим что такое имя существует, но определение дадим потом.
extern int a;
void f();

Дефиниция (может включать декларацию) — говорим вот это имя есть и значит вот конкретно это
int a;
void f(){}
источник

IZ

Ilia Zviagin in supapro.cxx
Nastya Medveda
а, то есть происходит определение класса, в котором инициализируется переменная?
Как =то странно сравнивать инициализацию с отсутствием инициализации..
источник

TC

TeeGeRoN Corp in supapro.cxx
Доброго времени суток. Вопрос по языке С, по функции sprintf.
Насколько я знаю, с ее помощью можно переименовать файлы. Мне был дан вид :
sprintf(filename, "%03i.format", 2")
что бы позволяло переименовать filename на 002.format , например. При использовании
sprintf("newFile.jpg", "%03i.jpg", counter);
На этом этапе я получаю ошибку сегментации. В чем проблема, куда глянуть, что почитать?
источник

C

CodeDetector in supapro.cxx
TeeGeRoN Corp
Доброго времени суток. Вопрос по языке С, по функции sprintf.
Насколько я знаю, с ее помощью можно переименовать файлы. Мне был дан вид :
sprintf(filename, "%03i.format", 2")
что бы позволяло переименовать filename на 002.format , например. При использовании
sprintf("newFile.jpg", "%03i.jpg", counter);
На этом этапе я получаю ошибку сегментации. В чем проблема, куда глянуть, что почитать?
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
источник

FS

Flower Surgeon in supapro.cxx
Danya
Декларация — это говорим что такое имя существует, но определение дадим потом.
extern int a;
void f();

Дефиниция (может включать декларацию) — говорим вот это имя есть и значит вот конкретно это
int a;
void f(){}
> Дефиниция
Фу-фу-фу.
источник

D

Danya in supapro.cxx
TeeGeRoN Corp
Доброго времени суток. Вопрос по языке С, по функции sprintf.
Насколько я знаю, с ее помощью можно переименовать файлы. Мне был дан вид :
sprintf(filename, "%03i.format", 2")
что бы позволяло переименовать filename на 002.format , например. При использовании
sprintf("newFile.jpg", "%03i.jpg", counter);
На этом этапе я получаю ошибку сегментации. В чем проблема, куда глянуть, что почитать?
> Насколько я знаю, с ее помощью можно переименовать файлы.
Нет, нельзя
источник

FS

Flower Surgeon in supapro.cxx
sprintf("newFile.jpg", "%03i.jpg", counter);

печатаешь в константу? лови UB
источник

TC

TeeGeRoN Corp in supapro.cxx
Danya
> Насколько я знаю, с ее помощью можно переименовать файлы.
Нет, нельзя
Странно. Прохожу курсы cs50 , в видеоинструкции сказали что можно с ее помощью это сделать. Но больше подробностей не дали
источник

TC

TeeGeRoN Corp in supapro.cxx
Flower Surgeon
sprintf("newFile.jpg", "%03i.jpg", counter);

печатаешь в константу? лови UB
А как можно сделать это правильно?
источник

FS

Flower Surgeon in supapro.cxx
TeeGeRoN Corp
Странно. Прохожу курсы cs50 , в видеоинструкции сказали что можно с ее помощью это сделать. Но больше подробностей не дали
Забей на этих "учителей", если они тебе такое говорят. Ну или может ты их не так понял, конечно...
источник

NM

Nastya Medveda in supapro.cxx
всем спасибо за ответы. Это несколько упрощает дело. Пойду разбираться в декларации, определении дефиниции и инициализации.
источник

D

Danya in supapro.cxx
TeeGeRoN Corp
А как можно сделать это правильно?
Почитать документацию..
источник

TC

TeeGeRoN Corp in supapro.cxx
Flower Surgeon
Забей на этих "учителей", если они тебе такое говорят. Ну или может ты их не так понял, конечно...
Скорее всего не так понял
источник

FS

Flower Surgeon in supapro.cxx
источник

D

Danya in supapro.cxx
Ну можно было дать и cppreference...
источник