Size: a a a

2020 October 19

DF

Dollar Føølish in pro.cxx
Он прям референс вернёт?
источник

T

Ternvein in pro.cxx
Dollar Føølish
Он прям референс вернёт?
Нет. Быстро ответили, про оверхед дописать не успел.
источник

DF

Dollar Føølish in pro.cxx
А, извините
источник

T

Ternvein in pro.cxx
Dollar Føølish
А, извините
Хотя...
Extracting a node invalidates the iterators to the extracted element. Pointers and references to the extracted element remain valid, but cannot be used while element is owned by a node handle
источник

VU

Vadim Ushakov in pro.cxx
Ternvein
Итератор нельзя, можно ноду. https://en.cppreference.com/w/cpp/container/set/extract
Естественно, с соответствующим оверхедом в итоге.
Оверхед смущает, но спасибо в любом случае
источник

AT

Alexander Tulikov in pro.cxx
Побитый Кирпич
Уб в общем случае
Интересно, что изменилось с
Scott Meyers - Effective STL, p79:
As an example, look again at the setTitle call we just saw that failed to compile under some implementations:
EmplDSet::iterator i = se.find(selectedlD);
if (i != se.end()) {
  i->setTitle("Corporate Deity");
  // some STL implementations will reject this line because *i is const
}
To get this to compile and behave correctly, we must cast away the constness of *i. Here's the correct way to do it:
if (i != se.end()) {
  const_cast<Employee&>(*i).setTitle("Corporate Deity");
  // cast away constness of*i
}
источник

АР

Андрей Руссков... in pro.cxx
Vadim Ushakov
Есть какой-нибудь легальный способ получить изменяемый итератор std::set? Я точно уверен, что не буду трогать поля, участвующие в сортировке, потому что сравнение там рукописное.
в общем случае ты ходишь по тонкому льду т.к. у тебя пропадают проверки времени компиляции что ты не нарушишь транзитивность
источник

ПК

Побитый Кирпич... in pro.cxx
Alexander Tulikov
Интересно, что изменилось с
Scott Meyers - Effective STL, p79:
As an example, look again at the setTitle call we just saw that failed to compile under some implementations:
EmplDSet::iterator i = se.find(selectedlD);
if (i != se.end()) {
  i->setTitle("Corporate Deity");
  // some STL implementations will reject this line because *i is const
}
To get this to compile and behave correctly, we must cast away the constness of *i. Here's the correct way to do it:
if (i != se.end()) {
  const_cast<Employee&>(*i).setTitle("Corporate Deity");
  // cast away constness of*i
}
Effective STL уже устарело, ну и в те древние времена культура разработки была хуже
источник

DF

Dollar Føølish in pro.cxx
Дремучие деды?
источник

AT

Alexander Tulikov in pro.cxx
Побитый Кирпич
Effective STL уже устарело, ну и в те древние времена культура разработки была хуже
😁
источник

ПК

Побитый Кирпич... in pro.cxx
Alexander Tulikov
Интересно, что изменилось с
Scott Meyers - Effective STL, p79:
As an example, look again at the setTitle call we just saw that failed to compile under some implementations:
EmplDSet::iterator i = se.find(selectedlD);
if (i != se.end()) {
  i->setTitle("Corporate Deity");
  // some STL implementations will reject this line because *i is const
}
To get this to compile and behave correctly, we must cast away the constness of *i. Here's the correct way to do it:
if (i != se.end()) {
  const_cast<Employee&>(*i).setTitle("Corporate Deity");
  // cast away constness of*i
}
Он ещё make_unique предлагал самому в std добавить, хотя формально это уб.
источник

m

magras in pro.cxx
Alexander Tulikov
Интересно, что изменилось с
Scott Meyers - Effective STL, p79:
As an example, look again at the setTitle call we just saw that failed to compile under some implementations:
EmplDSet::iterator i = se.find(selectedlD);
if (i != se.end()) {
  i->setTitle("Corporate Deity");
  // some STL implementations will reject this line because *i is const
}
To get this to compile and behave correctly, we must cast away the constness of *i. Here's the correct way to do it:
if (i != se.end()) {
  const_cast<Employee&>(*i).setTitle("Corporate Deity");
  // cast away constness of*i
}
Рекомендую дочитать главу до конца, вместо того чтобы вырывать слова из контекста.
источник

AT

Alexander Tulikov in pro.cxx
magras
Рекомендую дочитать главу до конца, вместо того чтобы вырывать слова из контекста.
Там сказано, что это UB? Нет. Там дальше просто приведён универсальный алгоритм.
источник

m

magras in pro.cxx
Побитый Кирпич
Он ещё make_unique предлагал самому в std добавить, хотя формально это уб.
У меня есть сомнения, что там речь шла о добавлении в namespace std, скорее всего о добавлении в свой неймспейс.
источник

m

magras in pro.cxx
Alexander Tulikov
Там сказано, что это UB? Нет. Там дальше просто приведён универсальный алгоритм.
int i = 0;
const int& cr = i;
const_cast<int&>(cr) = 42;

В этом коде нет UB, но компилятор не подскажет когда оно появится.
источник

m

magras in pro.cxx
Alexander Tulikov
Там сказано, что это UB? Нет. Там дальше просто приведён универсальный алгоритм.
Это же пример плохого кода, который сам автор не рекомендует. В начале главы он обозначает проблему и показывает плохое решение, объясняет его недостатки и в конце предлагает нормальное решение. Такой подход гораздо полезней во время обучения, так как студенту не нужно самостоятельно наступать на эти грабли, а достаточно дочитать главу до конца.
источник

AT

Alexander Tulikov in pro.cxx
magras
Это же пример плохого кода, который сам автор не рекомендует. В начале главы он обозначает проблему и показывает плохое решение, объясняет его недостатки и в конце предлагает нормальное решение. Такой подход гораздо полезней во время обучения, так как студенту не нужно самостоятельно наступать на эти грабли, а достаточно дочитать главу до конца.
Никто и не говорит, что это лучшие практики. Это способ решения поставленной задачи как есть. Понятно, что использовать extract или перейти на map это более правильный подход.
источник

R

Ruben in pro.cxx
А bitwise операции между знаковым и беззнаковым допускаются? Не UB?
источник

DF

Dollar Føølish in pro.cxx
промоушн же будет
источник

R

Ruben in pro.cxx
А к чему, к unsigned, если типы одноранговые?
источник