【发布时间】:2011-02-23 02:32:32
【问题描述】:
我的 C++ 知识有些零碎。我在工作中修改了一些代码。我更改了一个函数以返回对类型的引用。在内部,我根据传入的标识符查找对象,如果找到,则返回对该对象的引用。当然,我遇到了如果找不到对象要返回什么的问题,并且在浏览网络时,许多人声称在 C++ 中返回“空引用”是不可能的。根据这个建议,我尝试了返回成功/失败布尔值的技巧,并使对象引用成为输出参数。但是,我遇到了需要初始化作为实际参数传递的引用的障碍,当然没有办法做到这一点。我退回到只返回一个指针的通常方法。
我问过一位同事。他经常使用以下技巧,最近版本的 Sun 编译器和 gcc 都接受了这一技巧:
MyType& someFunc(int id)
{
// successful case here:
// ...
// fail case:
return *static_cast<MyType*>(0);
}
// Use:
...
MyType& mt = somefunc(myIdNum);
if (&mt) // test for "null reference"
{
// whatever
}
...
我已经维护这个代码库有一段时间了,但我发现我没有足够的时间来查找我想要的语言的小细节。我一直在翻阅我的参考书,但这本书的答案却让我难以捉摸。
现在,几年前我有一个 C++ 课程,其中我们强调在 C++ 中一切都是类型,所以我在思考问题时尽量记住这一点。解构表达式:“static_cast
任何解释为什么这有效(或为什么不应该)的建议将不胜感激。
谢谢, 查克
【问题讨论】:
-
你的同事叫 Bob 吗? gotw.ca/conv/002.htm
标签: c++