Я пришел из 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 для обучения и читабельности.
В самом языке C ++ нет ничего, что позволяло бы это. Переменные не могут изменить свой тип. Однако вы можете использовать класс-оболочку, который позволяет его данным динамически менять тип, например: boost::any
или же boost::variant
(C ++ 17 добавляет std::any
а также 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
}
Это невозможно. C ++ является статически типизированным языком, то есть типы не могут изменяться. Это не будет работать с авто или любым другим способом. Вы должны будете использовать другую переменную для int. В C ++ 11 и новее вы можете сделать:
std::string str = "hello";
auto i = return_int(str);
Или же:
int i = return_int(str);
В любом случае, если вы спросите меня, вызывать целое число «строка» немного странно.