重新定义类成员数据类型

时间:2018-07-17 18:16:40

标签: c++ types c++17 discriminated-union

是否可以在类成员的初始化后更改其数据类型?说,将一个名为“ Foo”的双精度重新定义为字符串?

2 个答案:

答案 0 :(得分:3)

不。类型在编译时是固定的。如果您想在双精度和字符串之间切换,则可以使用std::variant

std::variant<double, std::string> val = 1.0;
val = std::string("hello");

答案 1 :(得分:1)

作为对您的评论的回答,您应该使用std::optional

std::optional<int> Do(int x, int y)
{   
    if ( x == y ) 
    {
        return 42; 
    }

    return {}; 
}   

int main()
{   
    auto ret = Do(3,2); // << exchange your test data here!
    if ( ret ) 
    {   
        std::cout << "Got an answer" << ret.value() << std::endl;
    }   
    else
    {   
        std::cout << "No answer" << std::endl;
    }
}