저는 C#에서 느린 평가를 사용한다고 들었습니다. 따라서 if (true || DoExpensiveOperation()
과 같은 특정 코드의 경우 DoExpensiveOperation()
을 실행하지 않고 true
을 반환합니다. 나는 다음과 같은 질문을보고 면접 시험에 게으른 평가가 그렇게 게으르지 않습니까?
static bool WriteIfTrue(bool argument)
{
if (argument)
{
Console.WriteLine("argument is true!");
}
return argument;
}
static void Main()
{
// 1 0 0 1
WriteIfTrue((WriteIfTrue(false) & WriteIfTrue(true)) || WriteIfTrue(true));
// 1 1 0 1
WriteIfTrue((WriteIfTrue(true) || WriteIfTrue(false)) & WriteIfTrue(true));
// 0 0 0 0
WriteIfTrue((WriteIfTrue(false) & WriteIfTrue(true)) & WriteIfTrue(false));
// 1 1 0 1
WriteIfTrue((WriteIfTrue(true) || WriteIfTrue(false)) & WriteIfTrue(true));
}
몇 번 인쇄 할 것 "인수는 사실이다!" 화면에?
나는 7
이 정답이라고 말할 것입니다. 이제 컴파일러에 집어 넣고 실행하면 10
번 인쇄됩니다! 게으른 평가는 어디에서 모두 잘못 되었습니까?
그 && && 연산자는 무엇입니까? – Dialecticus
그건 게으른 평가가 아니며, 단락 중입니다. 또한, 비트 연산자 ('&')와 논리 연산자 ('||')를 섞어서 사용하고 있습니다. –