全局变量-C++为什么这种方式很危险



我的同行告诉我实现以下内容的方式是一种危险的做法。我在主方法和函数中为变量取了相同的名字。我的意思是,只要它有效,不是吗?你会怎么做?

谢谢。

#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。以便我们知道它是当前函数的输入。当你开始写大项目时,这些事情会很重要。:)总是尝试良好的实践。

你打字的时候需要时间。但是它在审查或调试时为您省去了很多麻烦。。另一方面,它没有其他重大缺点。

相关内容

  • 没有找到相关文章

最新更新