如果这个问题已经得到回答,我深表歉意——我已经搜索过了,但由于通过引用传递的更一般的问题数量众多,因此很难找到这个搜索词。
我遇到的问题是,当我编译这种东西时,我收到了 4 级警告:
class MyClass
{
public:
MyClass() {};
};
void DoSomethingToMyClass(MyClass& my_class_reference);
void MyRoutine()
{
DoSomethingToMyClass(MyClass());
};
警告 (C4239) 基本上是说从实例到引用的转换很狡猾。我从仔细检查中学会了不要注销 4 级警告,因为其中许多已经识别出我(和其他人)代码中的错误,例如将 -1 作为 size_t 返回(知道什么 size_t(-1) 的奖励积分)实际上是)。
谁能向我解释上面的代码实际上会做什么?我最偏执的理论是:
- MyClass() 的实例是即时创建的,但没有给出正确的句柄。
- 然后对 my_class_reference 引用执行的操作会误触发。
另一个极端是C4239总是可以忽略的……
*[类似的情况是有人默认引用:
void DoSomethingToMyClass(MyClass& my_class_reference=MyClass());
这会产生相同的警告,但在另一个主题中有部分内容。]*
编辑:
谢谢你们的快速反应,伙计们。抱歉:应该在 Visual Studio 中提到它是 VC++。