【发布时间】:2022-01-10 19:51:18
【问题描述】:
我在一个 C++ 教程视频中看到了几行代码
void copy_string(char* from, char* to)
{
while ((*to = *from) != '\0')
{
to++;
from++;
}
}
该函数用于将字符串“from”复制到字符串“to”中,但是我无法理解while循环内的条件语句。为什么可以同时赋值和比较?
【问题讨论】:
-
en.cppreference.com/w/c/language/operator_assignment: "返回一个左值,标识修改后的左操作数。"。
-
这个问题应该标记为C;它与 C++ 无关。赋值运算符 (
=) 返回分配的值,然后可以像任何其他值一样在表达式中使用该值。此外,可以编写while (*to++ = *from++);来实现(几乎)相同的事情,但这会在最后做两个额外的无用增量(编译器可能会或可能不会优化,具体取决于具体情况)。最后但并非最不重要的一点是,这种方法可能很危险:如果to指向的缓冲区比from中到'\0'的距离短,那么一切都会崩溃。 -
"为什么可以同时赋值和比较?" ...因为那里写了一个赋值运算符(
=)和一个比较运算符(!=)?为什么不能呢? -
@AndrejPodzimek:如果 OP 使用 C++ 编译器来编译代码,那么根据标签描述,将其标记为 C++ 而不是 C 是正确的,即使代码是“C 风格"。
-
@selbie 更简单:
while (*to++ = *from++);
标签: c++ string conditional-statements