C++ Logo

std-proposals

Advanced search

Re: [std-proposals] Calling methods on a nullptr

From: Sebastian Wittmeier <wittmeier_at_[hidden]>
Date: Thu, 31 Oct 2024 13:04:36 +0100
There are all kind of monadic expressions for testing for a value or error:   https://en.cppreference.com/w/cpp/utility/optional/value_or https://en.cppreference.com/w/cpp/utility/optional/or_else https://en.cppreference.com/w/cpp/utility/optional/and_then https://en.cppreference.com/w/cpp/utility/optional/transform   https://en.cppreference.com/w/cpp/utility/expected/value_or https://en.cppreference.com/w/cpp/utility/expected/or_else https://en.cppreference.com/w/cpp/utility/expected/and_then https://en.cppreference.com/w/cpp/utility/expected/transform https://en.cppreference.com/w/cpp/utility/expected/transform_error   Also there is a proposal for operator?? renamed try? https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2561r2.html   -----Ursprüngliche Nachricht----- Von:Lauri Vasama via Std-Proposals <std-proposals_at_[hidden]> Gesendet:Do 31.10.2024 11:01 Betreff:Re: [std-proposals] Calling methods on a nullptr An:std-proposals_at_[hidden]; CC:Lauri Vasama <wg21_at_[hidden]>; This sounds like the null conditional operator of C#. In C# x?.f() (as opposed to just x.f() ) returns null if x is null, and otherwise evaluates x.f(). I could see this being a useful new operator in C++, though nullability is more varied in C++. Would it work only for raw pointers? Or also for smart pointers? What about optionals? On 29/10/2024 22.20, Frederick Virchanza Gotham via Std-Proposals wrote: > On Tue, Oct 29, 2024 at 5:01 PM Jeremy Rifkin via Std-Proposals wrote: >> Do you have a concrete example of a problem that could be uniquely >> solved by being able to call a member function on a null pointer? My >> gut feeling is that this is an anti-pattern and symptom of bad design >>   however, I might not be considering all possible use cases. > > Well what came to mind for me first was where you have code like the following: > > string GetCodecName(Manager *const pmanager) > { >      if ( nullptr == pmanager ) return {}; >      auto *const pdev = pmanager->GetDevice(); >      if ( nullptr == pdev ) return {}; >      auto *const pchannel = pdev->GetChannel(0); >      if ( nullptr == pchannel ) return {}; >      auto *const plow = pchannel->GetLowPassFilter(); >      if ( nullptr == plow ) return {}; >      return plow->GetCodecName(); > } > > You could replace it with: > > string GetCodecName(Manager *const pmanager) > { >      return pmanager->GetDevice()->GetChannel(0)->GetLowPassFilter()->GetCodecName(); > } > > That's the kind of lines I was thinking along. -- Std-Proposals mailing list Std-Proposals_at_[hidden] https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals

Received on 2024-10-31 12:05:10