LINUX.ORG.RU

C++ вызов метода объекта в выражении с конструктором

 ,


0

2

Добрый день.
Подскажите пожалуйста момент.
Можно в C++ вызывать метод объекта сразу при создании:


class SomeClass {
public:
    int someMember() { return 0; }
};

int main() {

int i = SomeClass().someMember();

return 0;

}

Я так никогда не делал, т.к. считал, что это не по фэншую. Но вот иногда встречается в библиотеках эта форма (например в OpenCV есть).
Как вы к такому относитесь? И укажите пожалуйста, если в курсе, в стандарте такая форма где-то упомянается?

★★★★★

Ответ на: комментарий от anonymous

Задача моего комментария была в том, чтобы показать, что даже если Rot1 считает свой код эквивалентом ранее показанному, то этот код должен быть более многословным, чтобы хотя бы не вызывать проблем при компиляции.

Выяснение качества генерации единственного случайного числа из заданного диапазона оставлю специалистам в этой узкой предметной области.

eao197 ★★★★★ ()
Ответ на: комментарий от eao197

Выяснение качества генерации единственного случайного числа из заданного диапазона оставлю специалистам в этой узкой предметной области.

Ну зря вы так, это же база. Если у нас возможные варианты случайных чисел от генератора - это 0, 1 и 2, то взяв от такого числа mod 2, получим выпадение 0 в два раза чаще, чем 1. У rand(), конечно, вариантов значительно больше, но тоже небольшой перекос будет. Неаккуратненько.

anonymous ()
Ответ на: комментарий от anonymous

но тоже небольшой перекос будет

Ну и насколько большой он будет в случаях [350, 3499] и [350, 3500]?

Насколько это принципиально, если в программе за все время ее работы нужно единственное случайное число из диапазона [350, 3500]?

eao197 ★★★★★ ()
Ответ на: комментарий от eao197

Ну т.е. ситуации, когда эта разница будет иметь практически значимый смысл нужно тщательно подбирать.

К примеру, любые задачи по моделированию. Даже в таких незначительных казалось бы случаях говнокодить нежелательно, ведь это показывает незнание простейшей логики и математики с первого курса (или даже школы). Быть экспертом в плюсах для многих задач недостаточно, ведь теория вероятностей и логика - ни фига не узкие области.

anonymous ()
Ответ на: комментарий от anonymous

К примеру, любые задачи по моделированию.

По моделированию чего? Предположу, что речь может идти об имитационных моделях систем массового обслуживания и чего-то подобного. А не, скажем, моделирования жесткости композитных материалов.

Даже в таких незначительных казалось бы случаях говнокодить нежелательно

Говнокодить нежелательно вообще. И, как ни странно, в чем-то более-менее серьезном проекте вы вряд ли вообще столкнетесь с генерацией единственного случайного числа. Поэтому если в более-менее реальном коде вы столкнетесь такой генераций (хоть через uniform_int_distribution, хоть через rand) то это уже будет явным симптомом говнокода.

А вот где такое уместно, так это в примерах для библиотек. Когда пример чуть сложнее HelloWorld-а и одному объекту в примере нужно одно случайное число, а другому объекту другое, вот там захардкоженные одно-двух-строчники для генерации случайных чисел вполне уместны. И принципиальной разницы между uniform_int_distribution и показанным Rot1 использованием rand-а не будет. Ну вот вообще.

Я свой пример как раз и привел на основании именно такого опыта.

Быть экспертом в плюсах для многих задач недостаточно

ХЗ, вам виднее, я не эксперт.

ведь теория вероятностей и логика - ни фига не узкие области.

Из своего опыта я могу вспомнить всего два случая, когда мне пришлось прибегать к использованию ГСЧ. При этом в первом случае довольно быстро выяснилось, что ГСЧ там постольку-поскольку и никаких требований к его качеству не было вообще.

Во втором случае был просто взят ГСЧ из Crypto++, но и там, в общем, не факт, что все эти заморочки были нужны. Скорее для перестраховки.

Так вы свой ЧСВ достаточно почесали или еще найдете запятую, к которой изволите доколупаться и блеснуть уровнем знаний?

eao197 ★★★★★ ()
Ответ на: комментарий от anonymous

Ну и добавлю, что если в программе нужно всего одно случайное число, но при этом приходится иметь дело с большим числом запусков программы, то подход, показанный здесь будет плох не столько из-за (3500 - 350), сколько из-за std::srand(std::time(0)). И да, на этот счет я так же не счел нужным ничего сказать.

eao197 ★★★★★ ()