我的同行告诉我实现以下内容的方式是一种危险的做法。我在主方法和函数中为变量取了相同的名字。我的意思是,只要它有效,不是吗?你会怎么做?
谢谢。
#include <iostream>
#include <string>
#include <sstream>
#include "Three.h"
Three::Three(void)
{
}
Three::~Three(void)
{
}
void Three::rect (int& ar, int&vl, int len, int wid, int hgt)
{
ar = (len * wid) * 2 + (len+wid) * 2 * hgt;
vl = len * wid * hgt;
cout << "Area is " << ar << " square feet that contains " << vl << " cubic feet." << endl;
}
char qt;
int main (int, char**)
{
int len = 0;
int wid = 0;
int hgt = 0;
int ar = 0;
int vl = 0;
do
{
cout << "Length of House (ft): " << endl;
std::cin >> len;
cout << "Width of House (ft): " << endl;
std::cin >> wid;
cout << "Height of House (ft): " << endl;
std::cin >> hgt;
Three three;
three.rect (ar, vl, len, wid, hgt);
cout << "q, to quit" << endl; //My own quit statement
std::cin >> qt;
}
while (qt != 'q');
}
只要它能工作,不是吗通常不是一个好的咒语(尤其是在C/C++中,那里有很多看似工作的未定义行为的空间),但在这种情况下,我认为没有什么错。
如果你有一个局部变量隐藏了一个全局变量之类的东西,可能会有一些混淆的可能性,但这里并不是这样的——一个恰好与传递的参数同名的参数不会混淆,也一点也不"危险"。
这种做法绝对没有错。代码中有一些小的奇怪之处,但在两个函数中使用相同的变量名并不是其中之一。
他的意思可能是,如果在类函数和类本身中使用相同的变量名,这是"危险的",因为这会导致错误。但这里的情况并非如此,代码也很好。
代码中更危险的做法是从std::cin
中读取,而不检查是否有任何读取失败。如果有人这样做,你将在无限的等待qt
变成'q'
。
此外,仅使用cout
表明您可能在Three.h
中使用using namespace std;
,这不是推荐的做法。(也许它只有using std::cout;
,因为您明确限定了std::cin
?)
这样做没问题。但请记住给变量起更好的名字。例如,将wid
重命名为Width
。通常我更喜欢将函数的输入参数写为CCD_ 11。以便我们知道它是当前函数的输入。当你开始写大项目时,这些事情会很重要。:)总是尝试良好的实践。
你打字的时候需要时间。但是它在审查或调试时为您省去了很多麻烦。。另一方面,它没有其他重大缺点。