Size: a a a

2020 August 21

AS

Anatoly Shirokov in supapro.cxx
horse horssyyy
Короче я так понимаю основной кейс это опеределение статической переменной прям внутри хедер файла
да, все это ради header-only библиотек и, как следствие, борьба с нарушением ODR
источник

AC

Anton Chernysh in supapro.cxx
horse horssyyy
inline не обязана быть constexpr очевидно
Я и не утверждал, что обязана. Просто в моем понимании, что inline, что constexpr, дают возможность подставить значение переменной, на этапе компиляции в те места, где вызывается данная переменная. Но вот в чем их разница и в каких случаях они используются?

Вот на счет inline я уже увидел объяснение про header-only библиотеки, спасибо. 😊 Тогда, хотелось бы узнать еще про constexpr.
источник

VS

Vladimir Suisei in supapro.cxx
Anatoly Shirokov
A static data member may be declared inline. An inline static data member can be defined in the class definition and may specify an initializer. It does not need an out-of-class definition:

struct X
{
   inline static int n = 1;
};
Не член, а глобалка
источник

AS

Anatoly Shirokov in supapro.cxx
Vladimir Suisei
Не член, а глобалка
если ты просто объявишь static int global, то получишь экземпляр в каждом TU.
источник

VS

Vladimir Suisei in supapro.cxx
Anatoly Shirokov
если ты просто объявишь static int global, то получишь экземпляр в каждом TU.
Понятно. И при этом inline ни на что влиять не будет
источник

AS

Anatoly Shirokov in supapro.cxx
а inline static - масло маслянное
источник

AS

Anatoly Shirokov in supapro.cxx
Vladimir Suisei
Понятно. И при этом inline ни на что влиять не будет
да, ничего не изменит
источник

VS

Vladimir Suisei in supapro.cxx
Ок, все понятно, спасибо
источник

AS

Anatoly Shirokov in supapro.cxx
Anton Chernysh
Я и не утверждал, что обязана. Просто в моем понимании, что inline, что constexpr, дают возможность подставить значение переменной, на этапе компиляции в те места, где вызывается данная переменная. Но вот в чем их разница и в каких случаях они используются?

Вот на счет inline я уже увидел объяснение про header-only библиотеки, спасибо. 😊 Тогда, хотелось бы узнать еще про constexpr.
// tu1.cpp
constexpr int global = 10;
// tu2.cpp
constexpr int global = 10; // нарушение ODR

// tu1.cpp
inline constexpr int global = 10;
// tu2.cpp
inline constexpr int global = 10; // ok
источник

LA

Liber Azerate in supapro.cxx
Vladimir Suisei
Ок, все понятно, спасибо
Странно, в который раз вижу разговоры за inline и т.д., когда есть такая замечательная статья:
https://m.habr.com/ru/company/jugru/blog/506104/
#inline #static #extern #threadlocal #const #constexpr
источник

AC

Anton Chernysh in supapro.cxx
Anatoly Shirokov
// tu1.cpp
constexpr int global = 10;
// tu2.cpp
constexpr int global = 10; // нарушение ODR

// tu1.cpp
inline constexpr int global = 10;
// tu2.cpp
inline constexpr int global = 10; // ok
Понятненько, спасибо. 😊
источник

VS

Vladimir Suisei in supapro.cxx
Liber Azerate
Странно, в который раз вижу разговоры за inline и т.д., когда есть такая замечательная статья:
https://m.habr.com/ru/company/jugru/blog/506104/
#inline #static #extern #threadlocal #const #constexpr
static inline thread_local constexpr const volatile T x = {};

А ведь я когда-то угорал с public static void main
источник

C

CodeDetector in supapro.cxx
Vladimir Suisei
static inline thread_local constexpr const volatile T x = {};

А ведь я когда-то угорал с public static void main
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
источник

AM

Aleksander Mironov in supapro.cxx
Здравствуйте. Скажите как инициализировать статический массив, пропустив при этом часть индексов?

array = {
[0] = 12.
[1] = 1542.
// 2 пропущен
[3] = 311,
}

У меня выводится ошибка сборки, причем без какой либо конкретики.
источник

A

Alex in supapro.cxx
int a[] = {1, {}, 2, 3};
источник

AM

Aleksander Mironov in supapro.cxx
Alex
int a[] = {1, {}, 2, 3};
мне нужно индексов 50 пропустить
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Aleksander Mironov
Здравствуйте. Скажите как инициализировать статический массив, пропустив при этом часть индексов?

array = {
[0] = 12.
[1] = 1542.
// 2 пропущен
[3] = 311,
}

У меня выводится ошибка сборки, причем без какой либо конкретики.
Какой язык, какой тип array?
источник

AM

Aleksander Mironov in supapro.cxx
Artöm Bakri Al-Sarmini
Какой язык, какой тип array?
Цпп же, тип array - кастомная структура, это важно?
источник

ПК

Побитый Кирпич... in supapro.cxx
Aleksander Mironov
Здравствуйте. Скажите как инициализировать статический массив, пропустив при этом часть индексов?

array = {
[0] = 12.
[1] = 1542.
// 2 пропущен
[3] = 311,
}

У меня выводится ошибка сборки, причем без какой либо конкретики.
Потому что это не С++
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
template <size_t L, typename T, typename... Pairs>
std::array<T, L> init(Pairs... pairs) {
   std::array<T, L> res{};
   ((res[pairs.first] = pairs.second), ...);
   return res;
}
источник