以下代码向我发出警告,将临时作为参数传递给带引用的函数:
struct TempObject
{
typedef TempObject& reference;
const int First, Second;
TempObject(int first, int second) : First(first), Second(second) {}
};
void Function(const TempObject::reference ref)
{
std::cout<< ref.First << ref.Second;
}
int main(int argc, char *argv[])
{
Function(TempObject(1, 2)); // warning is given here
}
这让我感到困惑,因为Function
实际上是在接受const TempObject::reference
。将TempObject::reference
的定义更改为typedef const TempObject& reference
会导致编译器不再发出警告。
为什么会有区别?我在微软和英特尔的编译器中发现了这种行为。