zor*_*608 3 c++ operator-overloading default-constructor
不明白为什么return std::set<int>();还给空了std::set<int>.是否有运营商超载的operator ()在std::set上课吗?我假设它std::set<int>()是一个函数,而不是一个对象!这个函数定义在哪里?
似乎默认构造函数std::set<int> s;与表达式相同std::set<int>()???
谢谢你的回复...似乎我不懂C++基础知识......
std::set<int>()当用作表达式时,它是一个临时的,默认构造的实例std::set<int>.
首先,std::set<int>是一种类型.因此,C++11§5.2.3[expr.type.conv]/2解释了会发生什么:
表达式T(),其中T是非数组完整对象类型的简单类型说明符或类型名称说明符,或者(可能是cv限定的)void类型,创建指定类型的prvalue,其值为通过值初始化(8.5)生成类型为T的对象; 没有为void()情况进行初始化.
值初始化有许多规则,但是对于类这样的类std::set<int>,它等同于默认初始化,它只调用默认构造函数.由于默认构造函数std::set<int>产生一个空集,这就是你得到的.
值得注意的是,如果将参数放在括号中,这些参数将被传递给适当的构造函数.在这方面,这就像任何其他构造函数调用创建临时对象一样.
另外值得注意的是,std::set<int>()并不总是按照我的描述进行.请注意,我在用作表达式时说过.如果出现类型可能出现的位置,则它也是有效类型.特别是,它是一个没有参数返回a的函数std::set<int>.由于return后跟一个表达式,因此必须将其视为表达式而不是类型.