C ++为什么这样危险?

时间:2013-02-14 20:10:16

标签: c++ global-variables

我的同伴告诉我,我实施以下方式是一种危险的做法。我在main方法和函数中为变量添加了相同的名称。我的意思是只要它有效,是不是没问题? 你会怎么做不同的?

感谢。

#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'); 


}

5 个答案:

答案 0 :(得分:7)

只要它有效,是不是可以?一般来说不是一个好的口头禅(特别是在C / C ++中,有很多看似有效的未定义行为的空间),但是这种情况我认为没有错。

如果你有一个本地变量隐藏全局和类似的东西,可能会有一些混淆的可能性,但是这里没有什么 - 这个参数碰巧与通过它传递的参数的名称相同令人困惑,而不是“危险”。

答案 1 :(得分:4)

这种做法绝对没有错。您的代码有一些小问题,但在两个函数中使用相同的变量名称不是其中之一。

答案 2 :(得分:1)

如果你在类函数和类本身中使用相同的变量名,他可能意味着它是“危险的”,因为这会导致错误。这不是这里的情况,代码很好。

答案 3 :(得分:1)

您的代码中更危险的做法是您从std::cin读取而不检查是否有任何读取失败。如果有的话,您将无限期地等待qt成为'q'

此外,仅使用cout表示您可能在using namespace std;中有Three.h,这不是推荐的做法。 (或许它只有using std::cout;才能明确限定std::cin?)

答案 4 :(得分:0)

可以做到这一点。但请记住为变量提供更好的名称。例如,将wid重命名为Width。通常我更喜欢将函数的输入参数写为in_Width。这样我们就知道它是当前函数的输入。当你开始写大项目时,这些事情都很重要。 :)总是试着做好准备。

您输入时需要一些时间。但是在审查或调试时,它可以避免许多麻烦。另一方面,它没有其他重大缺点。