以下代码:
#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
谁能告诉我第一个版本有什么问题?
最佳答案
自定义操纵器签名不匹配,
你应该这样做:
std::ostream& my_manip (std::ostream &os) {
os.unsetf(std::ios_base::basefield);
os.setf(std::ios_base::scientific);
return os;
}
std::cout << my_manip << 8.8888888 << std::endl;
关于c++ - 简单的 I/O 操纵器未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20786852/