如果我有以下代码:
int a = 1;
bool b = 1;
Run Code Online (Sandbox Code Playgroud)
a等于b吗?即使程序可能会返回它们是相同的,它们在低级别的所有方面实际上是否相等?
另外,如果我使用代码(伪),例如:
if (a)
then execute();
Run Code Online (Sandbox Code Playgroud)
会execute()跑吗?我在寻求理论上的答案,我不能用实验来说服自己,因为这不是自然科学.谢谢你们.
我认为你可以用正确的实验说服自己:
#include <type_traits>
int main() {
int a = 1;
bool b = 1;
static_assert(! std::is_same<decltype(a), decltype(b)>::value,
"No, they are not the same on all aspects");
}
Run Code Online (Sandbox Code Playgroud)
也许两者之间最重要的区别是,bool只能有两个值:true而且false,虽然int可以有更多.这是另一个显示其结果的实验:
#include <cassert>
int main() {
int a = 2;
bool b = 2;
assert(a != b);
}
Run Code Online (Sandbox Code Playgroud)
这两种类型可能看起来相似,因为两者之间存在隐式转换.任何为零的整数表达式都可以隐式转换为false,并且任何非零的整数表达式都可以隐式转换为true.在相反的方向,false可以隐式转换为零,并true转换为一个.如果2!= 1,这导致上面的代码结束测试.
现在关于是否execute();从问题的片段中调用的问题的答案应该是显而易见的:值a将bool在if语句中转换为a ,并且因为它不为零,它将转换为true并导致调用execute().
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |