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

时间:2016-07-23 01:04:34

标签: c++ variables variable-types

我来自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()的返回值分配给另一个变量,但我想知道是否可以将字符串中的变量类型重新分配给int,以便学习和阅读。

2 个答案:

答案 0 :(得分:4)

C ++语言本身没有任何内容允许这样做。变量无法改变其类型。但是,您可以使用允许其数据动态更改类型的包装类,例如boost::anyboost::variant(C ++ 17添加std::anystd::variant):< / p>

#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
}

答案 1 :(得分:2)

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

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

或者:

int i = return_int(str);

无论如何,调用一个整数&#34; string&#34;如果你问我,有点奇怪。