你看到它用于for循环语句,但它在任何地方都是合法的语法.您在其他地方找到了什么用途,如果有的话?
常见的std :: cin用法
int X;
cin >> X;
Run Code Online (Sandbox Code Playgroud)
这样做的主要缺点是X不能const.它很容易引入错误; 我正在寻找一些技巧来创建一个const值,并只写一次.
天真的解决方案
// Naive
int X_temp;
cin >> X_temp;
const int X = X_temp;
Run Code Online (Sandbox Code Playgroud)
你可以通过改变X来明显改善它const&; 仍然可以修改原始变量.
我正在寻找一个如何做到这一点的简短而聪明的解决方案.我相信我不是唯一一个能从这个问题的答案中获益的人.
//编辑:我希望解决方案可以轻松扩展到其他类型(比方说,所有POD,std::string以及带有普通构造函数的可移动可复制类)(如果没有意义,请在评论中告诉我) .
此回复的注释指出,不应使用以下代码,因为它表现出未定义的行为:
int old = (std::cin >> old, old);
Run Code Online (Sandbox Code Playgroud)
类似的代码在这里也受到极大的嘲笑,尤其是对于表现出未定义的行为。
另一方面,这个极受好评的答复建议使用以下代码作为逗号运算符的有用性示例:
while (cin >> str, str != "STOP") {
//process str
}
Run Code Online (Sandbox Code Playgroud)
我假设如果此代码表现出未定义的行为,则不会被投票。
问题:如果第一个代码是未定义的行为(大概是由于使用了读取结果cin而不检查后者的状态),那么第二个代码为什么没问题?
编辑:第一个示例的评论部分中回答了该问题。第二个示例未显示的是它str的一个实例,std::string因此已初始化。因此,没有未定义的行为。