C ++故意重新定义变量

时间:2016-09-22 17:24:49

标签: c++

我想知道是否可以在C ++中重新定义变量,例如:

void some_function(int some_argument) {
    float some_argument=(float) some_argument;
    // Do stuff
    return some_argument;
}

有没有办法做到这一点?我知道你可以更改名称,但如果名称相同,它会更清晰。如果没有,是否有某些原因不包含此功能?

提前致谢。

2 个答案:

答案 0 :(得分:1)

  

有没有办法做到这一点?

您可以创建一个新范围并定义一个同名的新变量,该变量会影响函数参数的名称。

void some_function(int some_argument) {
   {
      float some_argument = 0;
      // Do stuff
   }
}

但是,你不能使用:

void some_function(int some_argument) {
   {
      float some_argument = (float)some_argument;
      // Do stuff
   }
}

在第二种情况下,初始化不使用函数参数来初始化阴影变量。它和

一样糟糕
int i = i;

通过以下方式避免所有这些麻烦:

  1. 为变量和参数使用不同的名称。

    void some_function(int some_argument_in) {
       float some_argument = (float)some_argument_in;
       // Do stuff
    }
    
  2. 使用函数重载。

    void some_function(float some_argument) {
       // Do stuff
    }
    
    void some_function(int some_argument) {
       some_function((float)some_argument);
    }
    

答案 1 :(得分:0)

以下内容提供了有关在intfloat之间进行转换时可能丢失数据的警告,但它演示了如何将变量作为一种类型传递并在函数中将其作为另一种类型使用:

float some_function(int some_argument) {
    // Do stuff
    return some_argument;
}

int main()
{
    float oldval = 3;
    float newval = some_function(oldval);
    return 0;
}