我的C++老师认为标准C++中的*运算符"已经过载",因为它可能意味着间接或乘法,具体取决于上下文.他从C++ Primer Plus得到了这个,它指出:
实际上,许多C++(和C)运算符已经过载.例如,*运算符在应用于地址时会生成存储在该地址的值.但是将*应用于两个数字会产生值的乘积.C++使用操作数的数量和类型来决定要采取的操作.(第502页,第5版)
至少有一本其他教科书说的大致相同.据我所知,这不是真的; unary*是与binary*不同的运算符,编译器消除歧义的机制与运算符重载无关.
谁是对的?
我有一个Visual Studio 2010 C++程序,其主要功能是:
vector<double> v(10);
double start = 0.0; double increment = 10.0;
auto f = [&start, increment]() { return start += increment; };
generate(v.begin(), v.end(), f);
for(auto it = v.cbegin(); it != v.cend(); ++it) { cout << *it << ", "; }
cout << endl << "Changing vars to try again..." << endl;
start = 15; increment = -1.5;
generate(v.begin(), v.end(), f);
for(auto it = v.cbegin(); it != v.cend(); ++it) { cout << *it << ", "; } …Run Code Online (Sandbox Code Playgroud)