c while()..执行代码行的条件
C++ while() ... condition on the execution of a line of code
给定链接列表的头部,当穿过链接列表以计算列表的大小时,可以做的常见方法可能是
ListNode* curr = head;
int count = 0;
while(curr) {
curr = curr->next;
count++;
}
,但我也看到人们这样做:
ListNode* curr = head;
int count = 0;
while(curr = curr->next) {
count++;
}
我记得在解析字符串中,我们经常做
stringstream content(intputStr);
string outputStr;
while(content >> outputStr) {
...
}
我想知道我可以始终在执行一行代码(在本主题中,curr = curr->下一个条件)的执行情况下始终调节我的时()吗?如果没有,边缘案件是什么?这是一个好习惯吗?
谢谢
在C 中,操作员可以像函数一样具有返回值。您是否可以将表达式用作条件完全取决于它们返回的内容。为此,您必须咨询文档。
在分配中: a = b
,默认行为是返回 b
的值;这就是这样,诸如a = b = c = 5
之类的链分配将起作用。
该表达式等效于a = (b = (c = 5))
。c = 5
将返回5,表达式变为a = (b = 5)
,b = 5
返回5,因此,该表达式再次变为a = 5
,从而将5分配给a
,b
和c
。
可以将流对象直接评估为布尔,因为它旨在通过覆盖的bool操作员进行。
在流对象上的>>
操作员的情况下,该操作员被覆盖以返回流对象,因此在以下内容中,while (cin >> userInput)
,cin >> userInput
返回cin
,它将产生true或false。
这是好习惯吗?
我仍然是一名大学生,因此需要服用盐分。就流而言,我会说这是一个很好的做法,因为这是一个众所周知的事情。大多数人可以说出您打算直接做的事情,而替代方案并不清楚。
至于作业,我倾向于否,但这取决于谁在阅读您的代码和您在做什么。如果使用太多,可能很难区分诸如if (userInput = 5)
和if (userInput == 5)
之类的东西,这使得很难找到错误。
基本概念是,while循环内部的表达式必须可转换为 bool
。
curr = curr->next
表达式通过参考返回表达式的左侧(请参阅链式作业)。表达式的左侧是指针,可转换为布尔值。如果指针等于 nullptr
,则转换后的布尔值将是一个错误,否则将是真实的。
表达式content >> outputStr
返回对content
流的引用。这就是为什么您可以像这样
>>
操作员的原因 cin >> a >> b;
cin >> a
返回对cin
对象的引用,因此表达式的评估如下
cin >> a;
cin >> b;
和cin
对象具有一个成员函数定义,允许其转换为布尔表达式(http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool),因此您可以做类似的事情这个
cin >> a;
cout << "cin has failed (true/false) : " << std::boolalpha << static_cast<bool>(cin) << endl;
// static_cast<bool>(cin) is the same as cin.(operator bool())
// if that syntax exists
使用operator bool()
方法将cin
对象转换为布尔表达式。像if()
语句或while()
中的布尔表达中的某些东西被转换为布尔值。
我想知道我可以始终在执行一行代码(在本主题中,curr = curr->下一个条件)的执行情况下始终调节我的时()吗?如果没有,边缘案件是什么?这是一个好习惯吗?
您可以这样做,如果表达式可转换为bool
,并且在许多情况下,将表达式嵌入循环中的是惯用"转换为bool"功能的习惯使用。边缘案例取决于表达式的实现细节。
您的示例有点扭曲,但至于您的问题:
我可以始终在执行一行代码(在本主题中,条件= curr->下一个条件)的执行情况下调节我的()吗?如果没有,边缘情况是什么?
while
中的条件可以是隐式转换为bool
的任何表达式。在您的示例中," curr = curr->next
"评估了一个适合此要求的指针。
这是一个好习惯吗?
不让您感到困惑的代码是很好的实践。
- 给定使用 Bitmask 的解决方案,我无法理解代码中标记的条件评估
- 条件不变的 if 语句会减慢我的C++代码吗?
- 为什么在同一条件变量上使用多个互斥锁会使此代码崩溃?
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- 为什么此代码不创建争用条件?
- 我可以在一行代码中将向量中与条件匹配的所有元素插入到集合中吗?
- C 模板:如何根据数据类型有条件编译不同的代码
- 可视化优雅C++代码:如何使用 while 循环和条件语句编写更高效的代码
- 如何在没有'switch'和'if-else'条件的情况下重写以下代码?
- 当满足条件时,是否可以在 GLSL 着色器中回调 C/C++ 函数/代码
- 为什么跨线程更改共享变量的代码显然没有受到竞争条件的影响
- 如果类型(不)相等,是否可以C++有条件地编译代码?
- c while()..执行代码行的条件
- OSX OpenGL设置代码中的种族条件
- 有条件地定义在运行时,在C 代码的其余部分中将使用3类
- C++模板可以用于条件代码包含吗
- C++模板中条件代码实例化的最干净方法
- c++宏:条件代码包含在表达式NOT语句中
- 在基于文本的冒险游戏中,我该如何避免冗长而令人困惑的条件代码
- 模板函数中的条件代码生成