初始化 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
}
我来自 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
}