初始化 C++ 后更改变量类型

Changing variable types after initialization C++

我来自 node.js,我想知道是否有一种方法可以在 C++ 中执行此操作。什么是 C++ 等效于:

var string = "hello";
string = return_int(string); //function returns an integer
// at this point the variable string is an integer

所以在 C++ 中我想做类似这样的事情...

int return_int(std::string string){
     //do stuff here
     return 7; //return some int
}
int main(){
    std::string string{"hello"};
    string = return_int(string); //an easy and performant way to make this happen?
}

我正在使用 JSON,我需要枚举一些字符串。我确实意识到我可以将 return_int() 的 return 值分配给另一个变量,但我想知道是否可以将变量类型从字符串重新分配给 int 为了学习和可读性。

那是不可能的。 C++ 是一种静态类型语言,即类型不能改变。这不适用于自动或任何其他方式。您将不得不为 int 使用不同的变量。在 C++11 和更新版本中,你可以这样做:

std::string str = "hello";
auto i = return_int(str);

或者:

int i = return_int(str);

无论如何,如果你问我,调用整数 "string" 有点奇怪。

C++ 语言本身不允许这样做。变量不能改变它们的类型。但是,您可以使用允许其数据动态更改类型的包装器 class,例如 boost::any or boost::variant (C++17 adds std::any and std::variant):

#include <boost/any.hpp>

int main(){
    boost::any s = std::string("hello");
    // s now holds a string
    s = return_int(boost::any_cast<std::string>(s));
    // s now holds an int
}

#include <boost/variant.hpp>
#include <boost/variant/get.hpp>

int main(){
    boost::variant<int, std::string> s("hello");
    // s now holds a string
    s = return_int(boost::get<std::string>(s));
    // s now holds an int
}