ФлеймФорумПрограммирование

Насыпьте сложных вопросов по C++ (9 стр)

Страницы: 15 6 7 8 9 10 Следующая »
#120
17:19, 21 мар 2024

1 frag / 2 deaths
> Профессор ДиректИкс
> А как ты переменную заводил?
> Vector v{}?

Vector v{};

синтезировал встроенный конструктор, инициализирующий нулями;

Vector v;
v.x = 2;
cout << v.x;

без инициализатора-фигурные-скобки компилятор ругается на использование неинициализированной переменной, вообщем, присвоил 2, чтобы  полю x , чтобы он не ругался — > конструктор не синтезируется; в поток выводится 2:
std::ostream::operator<<(std::cout, LODWORD(FLOAT_2_0), std::endl<char,std::char_traits<char>>);

вообщем, довольно интересно пока

#121
17:31, 21 мар 2024

1 frag / 2 deaths
> Vector v{}?
Это инициализирует поля в ноль.

#122
17:31, 21 мар 2024

Профессор ДиректИкс

Вот тут максимально простое определение: https://en.cppreference.com/w/cpp/language/default_constructor

The default constructor for class T is trivial (i.e. performs no action) if all of the following is true:

То есть всё что после можно заменить на одну мысль "не выполняет никаких действий" и всё.
Все эти условия про то, что конструктору по умолчанию не надо вообще ничего делать, соответственно и "синтезировать" нечего.

#123
17:36, 21 мар 2024

Очень интересно:

struct vector {
    float x,y,z;
};

template<typename T>
void construct1(T* ptr) {
    new(ptr) T();
}

template void construct1<vector>(vector*);

// void construct1<vector>(vector*):
//         mov     QWORD PTR [rdi], 0
//         mov     DWORD PTR [rdi+8], 0x00000000
//         ret

template<typename T>
void construct2(T* ptr) {
    new(ptr) T;
}

template void construct2<vector>(vector*);

// void construct2<vector>(vector*):
//         ret

Но вообще, Алекс правильно говорит, главная суть в том, что trivial default constructor — это нооп.

#124
17:38, 21 мар 2024

Имбирная Ведьмочка
> Это инициализирует поля в ноль.
А так?

Vector v();

Кто знает что произойдет с v - под спойлер пожалуйста

#125
17:38, 21 мар 2024

1 frag / 2 deaths
> Vector v();

+ Показать
#126
17:46, 21 мар 2024

1 frag / 2 deaths
> Vector v();

+ Показать
#127
17:48, 21 мар 2024

totoro
auto это ж для лохов

#128
18:00, 21 мар 2024

1 frag / 2 deaths
Зависит от контекста т.к. С++ контекстно-зависимый язык.

Для лохов вот:

+ Показать
#129
19:13, 21 мар 2024

totoro
> const auto& v = Vector();

struct vec { float x,y,z; };

void foo(vec* pv) {
    *pv = vec();
}

// foo(vec*):
//         mov     QWORD PTR [rdi], 0
//         mov     DWORD PTR [rdi+8], 0x00000000
//         ret
#130
19:27, 21 мар 2024

Имбирная Ведьмочка
Ясно. А к чему это, кстати?

UPD.
Старым дедовским способом, если ты про это, вот так надо: https://godbolt.org/z/fvGdzGr54

#131
21:00, 21 мар 2024

totoro
> Старым дедовским способом, если ты про это, вот так надо: https://godbolt.org/z/fvGdzGr54
Что надо?

#132
21:03, 21 мар 2024

Имбирная Ведьмочка
> Что надо?
Ну вектор инициализировать, а ты про что?

#133
21:06, 21 мар 2024

totoro
> Ну вектор инициализировать, а ты про что?
Ищем trivial default constructor. И там ищём, и сям ищем. И под кроватью смотрели, и за шкафом смотрели — а trivial default constructor всё нет и нет. Может быть, ты знаешь, куда спрятался trivial default constructor?

#134
22:06, 21 мар 2024

Имбирная Ведьмочка
> Может быть, ты знаешь, куда спрятался trivial default constructor?
В non-standard layout искали?
https://godbolt.org/z/M9PvYrsbf

Страницы: 15 6 7 8 9 10 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.