c++故意重新定义变量

C++ redefine a variable on purpose

本文关键字:定义 变量 故意 新定义 c++      更新时间:2023-10-16

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

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

有办法做到这一点吗?我知道你可以改名字,但如果名字不变的话会更简洁。如果没有,是不是有什么原因没有包含这个功能?

有办法做到这一点吗?

你可以创建一个新的作用域,并定义一个同名的新变量,该变量遮蔽了函数参数的名称。

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);
    }
    

下面给出了在intfloat之间转换时可能丢失数据的警告,但它演示了如何将变量作为一种类型传递,并将其作为另一种类型在函数中使用:

float some_function(int some_argument) {
    // Do stuff
    return some_argument;
}
int main()
{
    float oldval = 3;
    float newval = some_function(oldval);
    return 0;
}