函数采用具有默认值的引用参数

q09*_*987 3 c++

基于 http://www.cplusplus.com/reference/stl/vector/vector/

explicit vector ( const Allocator& = Allocator() );
Run Code Online (Sandbox Code Playgroud)

此向量构造函数采用具有默认值Allocator()的引用参数.我从这个函数签名中学到的是函数可以使用默认值的引用参数.

这是我和VS2010一起玩的演示代码.

#include "stdafx.h"
#include <iostream>

using namespace std;

void funA(const int& iValue=5) // reference to a template const int 5 why?
{
    cout << iValue << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    funA();
    funA(10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是否有一些规则来指导这种语法用法(即带有默认值的引用参数)?

Pup*_*ppy 12

Const引用可以绑定到临时对象,在这种情况下,临时对象的生命周期延伸到引用的生命周期.

  • @dreamlax:不完全是.左值和右值是指语法*表达式*(在C++ 98中,表达式必须是左值或右值).区别起源于C,其中rvalues(C非左值)的点可能是它们可能最终作为机器代码指令的一部分结束,而不是存储在任何存储器位置.简而言之,产生值的表达式是rvalue表达式,而引用内存中某个对象的表达式(引用类型的表达式必然会这样)是左值表达式.希望我没有过度简化, (4认同)