【发布时间】:2018-12-10 01:54:25
【问题描述】:
所以我有以下三行代码困扰着我:
int choice;
std::cin >> choice;
platform = platforms[choice];
感觉它应该是一个单行但我坚持如何实现它。
我在想这样的事情:
platform = platforms[(int)operator>>(std::cin)];
但显然不完全是因为编译器不会有它。
【问题讨论】:
-
operator>>返回一个流,将其转换为int是没有意义的。不要以为没有辅助函数就可以做到这一点。 -
可能是
platform = platforms[ *std::istream_iterator<int>( cin ) ];,但如果operator>>失败,这将是 UB。所以你应该为std::cin启用异常来处理错误。 -
您的代码非常不安全 - 用户可以输入任何内容。你想做什么只会使情况恶化。你想达到什么目标?如果要减少代码量,那么这里不是你应该做的地方。
-
感谢代码完全可以解决问题(如果您将其作为答案提出来,我肯定会感谢它)。 - 我知道代码是多么不安全 - 它仅供我自己在编写一些一次性代码时使用。
-
只是为了大家的娱乐,我想出的是 'platform = platforms[(int)[](){int choice; std::cin >> 选择;回报选择; }()];' ...这就是旧的强迫症开始了:)
标签: c++