编辑:有人提到std :: complex是一个比std :: string更好的例子,用于“好用”运算符重载,所以我也包括一个例子:
std::complex c;
c = 10.0;
c += 2.0;
c = std::complex(10.0, 1.0);
c = c + 10.0;
除了构造函数语法之外,它的外观和行为与任何其他内置类型一样.
主要的专业是你可以创建像内置类型一样的新类型.一个很好的例子是c中的std :: string(参见上面的更好的例子).这是在库中实现的,不是基本类型.但你可以写下这样的东西:
std::string s = "hello"
s += " world";
if(s == "hello world") {
//....
}
缺点是容易滥用.运算符重载的选择不当可能导致意外低效或不清楚的代码.想象一下,如果std :: list有一个operator [].你可能想写:
for(int i = 0; i < l.size(); ++i) {
l[i] += 10;
}
这是一个O(n ^ 2)算法!哎哟.幸运的是,std :: list没有operator [],因为它被认为是一个有效的操作.