【发布时间】:2019-05-30 19:12:51
【问题描述】:
我在理解函数,尤其是模板函数和局部变量在编译期间的行为方面遇到了麻烦。
所以这段代码与std::get 配合得很好:
enum class UserInfoFields{name, email, address};
using UserInfo = std::tuple<std::string, std::string, std::string>;
int main()
{
UserInfo s{"Edmund", "edmund@page.me", "Denver street 19"};
std::cout << std::get<static_cast<size_t>(UserInfoFields::name)>(s) << std::endl;
return 0;
}
据我了解,这是因为std::get 是一个模板函数,它需要在编译期间知道模板参数。这是有道理的,因为static_cast<... 在编译期间为我们提供了价值。
如果我把main()代码改成这样,我不明白的地方:
int main()
{
UserInfo s{"Edmund", "edmund@page.me", "Denver street 19"};
auto a = static_cast<size_t>(UserInfoFields::name);
std::cout << std::get<a>(s) << std::endl;
return 0;
}
这是不允许的。我知道我必须使用constexpr,但我想知道,为什么第二个代码不起作用?
【问题讨论】: