gpt4 book ai didi

c++ - 假设引用作为指针传递是否有效

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:13 27 4
gpt4 key购买 nike

我有一个这样定义的函数:

void doSomethingWithCustomer (const Customer &customer);

我的一位开发人员这样调用它:

Customer *customer = order.getCustomer();
doSomethingWithCustomer (*customer);

不幸的是,如果订单没有绑定(bind)到客户,getCustomer 方法可以返回一个 nullptr。如果 getCustomer 返回 nullptr,则应用程序不会在调用 doSomethingWithCustomer 时崩溃,而是在使用客户引用的函数内崩溃。

当然,正确的写法是先检查客户是否为 nullptr,然后在我们有有效客户时调用该函数。通常我们期望如果一个函数/方法有一个引用参数,那么调用者会检查它的有效性(这里不是这种情况),而不是函数本身检查参数。

我知道 Visual Studio 2010(及更早版本)通过实际传递指针来传递引用,但我想知道这是否在 C++ 标准的某处指明。我们是否可以假设引用总是作为指针传递(就我个人而言,我不会依赖这一点,但了解它很有趣)?

是否可以告诉 Visual Studio 在传递引用时,它应该首先自动解除引用并在调用时崩溃,而不是在更深层次的地方崩溃(在调试版本中这样做可能就足够了)?

最佳答案

Is it valid to assume that a reference is passed as a pointer?

不,不是。
该标准不强制引用应根据指针来实现。

如何实际实现引用是标准遗漏的实现细节,由实现决定。它仅描述引用的预期行为,其中之一是在符合标准的程序中引用永远不能为 NULL

如果您的函数参数有时预计为 NULL,那么您应该将其作为指针传递。

关于c++ - 假设引用作为指针传递是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13470035/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com