我在这个网站上搜索,人们说应该避免使用
我知道总是输入
然而,当你在文件开头输入
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的教程中,它说:
记住,使用
from Package import specific_submodule
是没有问题的!实际上,除非导入模块需要使用来自不同包的相同名称的子模块,否则这是推荐的符号。
我想知道在C++程序中我应该怎么做。
std::string
等,除非将using
语句的作用域限定在函数范围内。即使是这样,我也喜欢只使用std::
来明确表示。 - NathanOliverusing std::vector
,但是在代码中又引用了std::vector
。两者不能同时存在。 - Martin Bonner supports Monicagrade
的参数而言,那个行继续符是不必要/不推荐的。 - Martin Bonner supports Monicastd::
。 - an offer can't refuse