gpt4 book ai didi

c++ - 任何人都可以解释这个简单逻辑背后的逻辑吗?我迷路了

转载 作者:太空狗 更新时间:2023-10-29 19:40:18 28 4
gpt4 key购买 nike

我只是在 C++ 中尝试 do while 循环,同时我想出了一个想法,即在 do while 循环中的 while 之后,在括号内进行描述,或者不管它叫什么。所以这是我的初始逻辑:我已经设置了 password变量和一个 input多变的。如果两者匹配,那么它会跳出循环并输出“正确的密码”,否则它会继续返回循环,输出“错误的密码”等等。这是我的代码:

// do while
#include<iostream>
using namespace std;
int main(){
int input, password=19960819;
do{
cout << "Type your password:" ;
cin >> input;
}while(input!=password && cout << "wrong password" << endl);
cout << "correct password" << endl;
return 0;
}

我原以为即使我输入了正确的答案,我仍然会输出“错误的密码”。我以为cout << "wrong password" << endl部分将始终返回为 true ,无论如何也应该执行,唯一的因素是 input!=password部分。然而,结果实际上是完美的,这不是我所期待的......任何人都可以解释逻辑吗?我在挑战自己不要使用 if或其他逻辑,但只需使用 do while达到这个结果的逻辑,但我不明白它现在起作用的原因......

最佳答案

C++ 使用 short-circuit evaluation对于内置1 bool 运算符,这意味着当您执行以下操作时:

A && B

B仅在 A 时才被评估是true ,因为如果 Afalse , 整个表达式为 false (无论 B 的值是多少)。

所以在:

input != password && cout << "wrong password" << endl

input != passwordfalse (当你输入正确的密码时),第二个操作数cout << "wrong password" << endl未被评估,因此不输出任何内容。


关于条件评估的额外细节:

  • input != password 的类型是bool ;
  • cout << "..." << endl 的类型是std::ostream& ;
  • A std::ostream convertible to bool 直接 (C++11 起) 或使用到 void* 的转换(C++03)。

因为没有operator&&(bool, [const] std::ostream&)std::ostream可转换为 bool , 内置 operator&&(bool, bool)在这里使用,所以短路评估适用2

input != passwordtrue (您输入了错误的密码),cout << "..." << endl被评估,然后转换为 bool值(value),这将由true大部分时间3,从而允许循环继续。

input != passwordfalse , 短路防止 cout << "..." << endl从被评估,并且没有被发送到输出。

1 对于重载运算符,短路评估不再适用。参见 http://en.cppreference.com/w/cpp/language/operator_logical .

2 您可以为 && 添加用户定义的重载之前 main ,例如bool operator&&(bool b, std::ostream &s) { return b && (bool)s; } , 可以看到短路仅适用于内置运算符。

3 不能保证这会返回 true ,因为流可能处于失败状态,但是对于 std::cout不太可能 .

关于c++ - 任何人都可以解释这个简单逻辑背后的逻辑吗?我迷路了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41571174/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com