我正在使用一个STL向量,它是参数的向量。将构造函数传递给函数
std::vector<Parameter> foo;
我试图找到一种方法,参数对象添加到载体不这样做:
foo.push_back(Parameter()); //Using the Parameter constructor
心想:
Parameter a;
foo.push_back(a);
我碰到的是这样做的实现来当我创建一个对象时,构造函数被称为不是反之亦然。为什么我可以将构造函数传递给函数?
虽然它实际上不仅仅是简写。程序的语义在两种变体中都有所不同。当传递一个匿名对象时,该对象在表达式的末尾被销毁。但是在声明一个变量时,生命周期会扩展到范围的末尾。 –
@ phresnel:是的,从编译器(迂腐)的角度来看,可以把'a'的地址作为L值;从程序员的角度来看,当他/她这样写时,通常是为了避免给它命名。 – legends2k
或者确保没有浪费或资源保持长时间打开。精确度甚至可能是灾难性的。想象一下,你将一些数据库连接传递给一个函数,并且在函数调用之后,你进入一些等待模式,并且连接可能会持续几小时,几天,几周。有一天,它可能会抛出一个异常,因为数据库被关闭,或者数据库不能关闭,因为一些不活动的守护进程(你的)保持打开一个未使用的连接。实际上,C++程序员一定是范围和RAII意识,并且像本地一样明智。 –