【发布时间】:2025-12-02 03:20:03
【问题描述】:
我搜索了这个网站,有人说你应该避免使用using namespace std。我完全同意。但是,using std::cin 和 using std::string 呢?应该避免还是鼓励这样做?
我知道总是输入std::cin 是最安全的选择,但是一次又一次地输入它们非常乏味。
但是,当您在文件开头键入using std::cin 等时,似乎很拥挤。比如这个简单的程序读取和计算学生成绩,前面有太多using std::,看起来很不舒服。
#include <iostream>
#include <ios>
#include <iomanip>
#include <stdexcept>
#include <vector>
using std::cin; using std::cout;
using std::istream; using std::vector;
using std::setprecision; using std::domain_error;
using std::string; using std::getline;
using std::streamsize;
istream& read_hw(istream& in, vector<double>& homework);
double grade(double mid_exam, double final_exam, \
const vector<double>& homework);
int main() {
std::string name;
std::getline(std::cin, name);
std::cout << "Hello, " + name + "!" << std::endl;
double mid_exam, final_exam;
std::cin >> mid_exam >> final_exam;
std::vector<double> homework;
read_hw(std::cin, homework);
try {
double final_grade = grade(mid_exam, final_exam, homework);
std::streamsize prec = std::cout.precision();
std::cout << "your final grade is:" << std::setprecision(3)
<< final_grade << std::setprecision(prec) << std::endl;
}
catch(std::domain_error) {
std::cout << std::endl << "No homework entered!" << std::endl;
return 1;
}
return 0;
}
std::istream& read_hw(std::istream& in, std::vector<double>& homework) {
if(in) {
homework.clear();
double x;
while(in >> x) {
homework.push_back(x);
}
}
in.clear();
return in;
}
double grade(double mid_exam, double final_exam, \
const std::vector<double>& homework) {
std::vector<double>::size_type i, size;
size = homework.size();
if(size ==0) {
throw std::domain_error("no homework grade entered!");
}
double sum = 0;
double average = 0;
for(i = 0; i < size; ++i) {
sum += homework[i];
}
average = sum/size;
return mid_exam*0.3 + final_exam*0.3 + average*0.4;
}
在python's tutorial 中,它说:
请记住,使用
from Package import specific_submodule并没有错!事实上,这是推荐的符号,除非 导入模块需要使用同名的子模块 不同的包。
我想知道我应该在 c++ 程序中做什么。
【问题讨论】:
-
就个人而言,我建议您始终使用
std::string等,除非您将 using 语句的范围限定为函数范围。即使这样,我也喜欢只使用 std:: 来明确。 -
我注意到你有一个
using std::vector,但是你在代码中引用了std::vector。两者兼有是不对的。 -
另外,
grade的参数的那一行延续是不需要/不希望的 -
最后,如果写输出抛出,你不会恢复精度。
-
@MartinBonner 我没有时间删除程序中的那些
std::...
标签: c++ coding-style code-readability