Pat*_*ick 6 c++ arguments reference visual-studio-2010
我有一个像这样定义的函数:
void doSomethingWithCustomer (const Customer &customer);
Run Code Online (Sandbox Code Playgroud)
我的一位开发人员称之为:
Customer *customer = order.getCustomer();
doSomethingWithCustomer (*customer);
Run Code Online (Sandbox Code Playgroud)
不幸的是,getCustomer如果订单没有绑定到客户,该方法可以返回nullptr.如果getCustomer返回nullptr,则应用程序在调用时不会崩溃,doSomethingWithCustomer而是在使用客户引用的函数内崩溃.
当然,写这个的正确方法是首先检查客户不是nullptr,然后如果我们有一个有效的客户则调用该函数.通常我们期望如果函数/方法具有引用参数,则调用者检查它的有效性(这不是这里的情况),而不是函数本身检查参数.
我知道Visual Studio 2010(和早期版本)通过实际传递指针来传递引用,但我想知道这是否在C++标准中的某处显示.我们可以假设引用始终作为指针传递(个人而言,我不会依赖于此,但知道它是有趣的)?
是否有可能告诉Visual Studio在传递引用时,它应该首先自动取消引用它并在调用时崩溃而不是更深一些(在调试版本中执行此操作可能就足够了)?
假设引用作为指针传递是否有效?
不它不是。
该标准并不强制要求引用应该以指针的形式实现。
如何实际实现参考是一个实现细节,该标准没有由实现来决定。它仅描述引用的预期行为,其中之一是引用永远不能出现NULL在标准一致的程序中。
如果您的函数参数有时是预期的,NULL那么您应该将其作为指针传递。
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |