date d(2002,Jan,1);
ptime t(d,minutes(5));
ptime t2 = t + hours(1) + minutes(2);
最后一句中的hours和minutes,这两个好像都是类,而不是普通的函数。
在这里用普通函数的调用方法去调用一个类的构造函数?在C++里可以直接这样调用吗?
这里的意思是不是 不用声明一个hours对象,直接这调用构造函数,就自动生成了一个对象呢?
俺是从C转过来的,很多C++的用法不太习惯,各位大大帮忙解释一下吧,谢谢啊
7 个解决方案
#1
这里 应该是对象的相加吧,类估计是hour和minute
#2
谢谢楼上,类确实是 hours 和 minutes,下面是他们的定义
class hours : public time_duration
{
public:
explicit hours(long h) :
time_duration(h,0,0)
{}
};
class minutes : public time_duration
{
public:
explicit minutes(long m) :
time_duration(0,m,0)
{}
};
#3
没错,直接调用构造函数就可以生成一个“匿名”的对象。比如说:
string s = "abc" + "def";
这样是不能编译的,但稍微一改就行了:
string s = string("abc") + "def";
string s = "abc" + "def";
这样是不能编译的,但稍微一改就行了:
string s = string("abc") + "def";
#4
谢谢楼上兄弟,那俺又多了一个担心,如果大量用这种匿名对象,会不会造成后来在内存中存在大量的这咱死对象呢?
也就是说,这个生成的匿名对象,在这条语句结束后会不会自动被析构掉呢?
也就是说,这个生成的匿名对象,在这条语句结束后会不会自动被析构掉呢?
#5
当超出匿名对象的作用域的时候,自动调用该对象的析构函数啊
#6
会的,匿名对象的生存周期是包含它的最大的表达式结束时。除非它被一个常量引用所绑定(这时将进一步延长到引用的作用域结束时),但迟早还是会析构的。
#7
谢谢各位兄弟,整明白了,:P
#1
这里 应该是对象的相加吧,类估计是hour和minute
#2
谢谢楼上,类确实是 hours 和 minutes,下面是他们的定义
class hours : public time_duration
{
public:
explicit hours(long h) :
time_duration(h,0,0)
{}
};
class minutes : public time_duration
{
public:
explicit minutes(long m) :
time_duration(0,m,0)
{}
};
#3
没错,直接调用构造函数就可以生成一个“匿名”的对象。比如说:
string s = "abc" + "def";
这样是不能编译的,但稍微一改就行了:
string s = string("abc") + "def";
string s = "abc" + "def";
这样是不能编译的,但稍微一改就行了:
string s = string("abc") + "def";
#4
谢谢楼上兄弟,那俺又多了一个担心,如果大量用这种匿名对象,会不会造成后来在内存中存在大量的这咱死对象呢?
也就是说,这个生成的匿名对象,在这条语句结束后会不会自动被析构掉呢?
也就是说,这个生成的匿名对象,在这条语句结束后会不会自动被析构掉呢?
#5
当超出匿名对象的作用域的时候,自动调用该对象的析构函数啊
#6
会的,匿名对象的生存周期是包含它的最大的表达式结束时。除非它被一个常量引用所绑定(这时将进一步延长到引用的作用域结束时),但迟早还是会析构的。
#7
谢谢各位兄弟,整明白了,:P