【发布时间】:2013-12-26 14:57:46
【问题描述】:
以下代码:
#include <iostream>
std::ios_base &my_manip (std::basic_ios<char> &os) {
os.unsetf(std::ios_base::basefield);
os.setf(std::ios_base::scientific);
return os;
}
int main (int argc, char **argv) {
std::cout << 8.8888888 << std::endl;
std::cout << my_manip << 8.8888888 << std::endl;
return 0;
}
打印:
8.88889
18.88889
以下代码:
#include <iostream>
std::ios_base &my_manip (std::basic_ios<char> &os) {
os.unsetf(std::ios_base::basefield);
os.setf(std::ios_base::scientific);
return os;
}
int main (int argc, char **argv) {
std::cout << 8.8888888 << std::endl;
my_manip(std::cout);
std::cout << 8.8888888 << std::endl;
return 0;
}
打印预期结果:
8.88889
8.888889e+00
谁能告诉我第一个版本有什么问题?
【问题讨论】:
-
basic_ostream具有函数指针的重载。您的函数的签名与其中任何一个都不匹配。