Size: a a a

2020 August 17

IZ

Ilia Zviagin in pro.cxx
d7d1cd
Привет всем. Недавно здесь упоминался компилятор Borland. Вспомнил случай, когда писал в C++Builder какую-то программу. Когда указанный компилятор в режиме Release компилирует ниже приведенный тестовый код, то он выдает предупреждение, что функция должна возвращать значение. Причем если убрать ключевое слово inline, то предупреждение пропадает. И если переключить компилятор на clang, то предупреждение тоже пропадает. Кто-то может объяснить почему так?
/*----- unit1.h -----*/
inline bool Foo();


/*----- unit1.cpp -----*/
bool TForm1::Foo()
{
 bool b;
 int i;

 if (b) i = 1;
 else if (!b) i = 2;
 else return true;

 return false;
}
Тут данное предупреждение выводиться не должно.
Должно бы выводиться другое, что переменная b не инициализирована, но это компилятор делать не обязан.
источник

d

d7d1cd in pro.cxx
Да, не должно. А выводится.
источник

IZ

Ilia Zviagin in pro.cxx
d7d1cd
Привет всем. Недавно здесь упоминался компилятор Borland. Вспомнил случай, когда писал в C++Builder какую-то программу. Когда указанный компилятор в режиме Release компилирует ниже приведенный тестовый код, то он выдает предупреждение, что функция должна возвращать значение. Причем если убрать ключевое слово inline, то предупреждение пропадает. И если переключить компилятор на clang, то предупреждение тоже пропадает. Кто-то может объяснить почему так?
/*----- unit1.h -----*/
inline bool Foo();


/*----- unit1.cpp -----*/
bool TForm1::Foo()
{
 bool b;
 int i;

 if (b) i = 1;
 else if (!b) i = 2;
 else return true;

 return false;
}
А какой смысл разбирать такой вот бессмысленный код? И Варны, которые он выдает?
источник

IZ

Ilia Zviagin in pro.cxx
d7d1cd
Да, не должно. А выводится.
Ну, сделай репро , пошли авторам компилятора баг.
источник

d

d7d1cd in pro.cxx
Ilia Zviagin
А какой смысл разбирать такой вот бессмысленный код? И Варны, которые он выдает?
Это тестовый код, который позволяет воспроизвести ошибку.
источник

AS

Alex Sandrov in pro.cxx
Добрый день
У меня такой вопрос. vector хорош для быстрых итераций по всей коллекции. unordered_map хорошо для быстрого доступа по ключу. А кто как совмещает эти два контейнера в чём-то одном, чтобы и доступ по ключу и быстрые итерации/доступ по индексу? 😐
источник

AT

Andrew Titov in pro.cxx
А как совместить ключ и индекс?
источник

AS

Alex Sandrov in pro.cxx
Andrew Titov
А как совместить ключ и индекс?
Нет, хочется доступа И по ключу (например, текстовый ключ) И по индексу.
источник

AS

Alex Sandrov in pro.cxx
Можно, наверно, в мапе хранить индексы по ключу... Но это хорошо/удобно?
источник

D

Danya in pro.cxx
Alex Sandrov
Добрый день
У меня такой вопрос. vector хорош для быстрых итераций по всей коллекции. unordered_map хорошо для быстрого доступа по ключу. А кто как совмещает эти два контейнера в чём-то одном, чтобы и доступ по ключу и быстрые итерации/доступ по индексу? 😐
flat_hash_map
источник

D

Danya in pro.cxx
Alex Sandrov
Нет, хочется доступа И по ключу (например, текстовый ключ) И по индексу.
Ну такое
источник

SK

Stas Koynov in pro.cxx
Alex Sandrov
Нет, хочется доступа И по ключу (например, текстовый ключ) И по индексу.
ну либо в мапе сортируешь по ключу и в нем хранишь вектор. (если ключ == некоторые значениЯ по индексу) либо хранишь две мапы, но ты должен делать их согласованными. тобишь иметь инструмент соответсвия ключ-индекс если они 1:1
источник

АК

Александр Караев... in pro.cxx
d7d1cd
Привет всем. Недавно здесь упоминался компилятор Borland. Вспомнил случай, когда писал в C++Builder какую-то программу. Когда указанный компилятор в режиме Release компилирует ниже приведенный тестовый код, то он выдает предупреждение, что функция должна возвращать значение. Причем если убрать ключевое слово inline, то предупреждение пропадает. И если переключить компилятор на clang, то предупреждение тоже пропадает. Кто-то может объяснить почему так?
/*----- unit1.h -----*/
inline bool Foo();


/*----- unit1.cpp -----*/
bool TForm1::Foo()
{
 bool b;
 int i;

 if (b) i = 1;
 else if (!b) i = 2;
 else return true;

 return false;
}
bool b не инициализирован, UB
источник

AS

Alex Sandrov in pro.cxx
Danya
flat_hash_map
Это, получается, ещё один boost?
источник

D

Danya in pro.cxx
Alex Sandrov
Это, получается, ещё один boost?
Что значит ещё один?
источник

AS

Alex Sandrov in pro.cxx
Stas Koynov
ну либо в мапе сортируешь по ключу и в нем хранишь вектор. (если ключ == некоторые значениЯ по индексу) либо хранишь две мапы, но ты должен делать их согласованными. тобишь иметь инструмент соответсвия ключ-индекс если они 1:1
Ну я как-то так и делаю, думал, что есть более удобное решение. И мапа у меня несортируемая :(
источник

AS

Alex Sandrov in pro.cxx
Danya
Что значит ещё один?
Ну это (ранее мне не знакомая) библиотека absl
источник

D

Danya in pro.cxx
Alex Sandrov
Ну это (ранее мне не знакомая) библиотека absl
Ну нет, не только она
Есть ещё robin hood
источник

AS

Alex Sandrov in pro.cxx
Danya
Ну нет, не только она
Есть ещё robin hood
Спасибо, гляну, написано, что у них (absl) самая шустрая мапа
источник

IZ

Ilia Zviagin in pro.cxx
Alex Sandrov
Добрый день
У меня такой вопрос. vector хорош для быстрых итераций по всей коллекции. unordered_map хорошо для быстрого доступа по ключу. А кто как совмещает эти два контейнера в чём-то одном, чтобы и доступ по ключу и быстрые итерации/доступ по индексу? 😐
Но быстрые итерации есть и по map... Так в чем проблема то?
источник