==
不是我们比较两个数组的方式,因为这只会比较地址:
#include <iostream>
int main()
{
char a[] = "aaa";
char b[] = "aaa";
if (a == b)
std::cout << "Yes" << std::endl;
else
std::cout << "No" << std::endl;
return 0;
}
这段代码甚至给了我一个警告:
数组比较始终会评估为false
但是当我尝试了以下代码时:
if ("aaa" == "aaa")
看起来它运行得很好。仍然会给我一个警告,但是这个警告是:
条件总是为真
起初,我以为这是一些缓存问题,所以我尝试了一个相当不寻常的字符串字面量:
if ("whuiwhqohqweihqweohi" == "whuiwhqohqweihqweohi")
在MSVC和g++上都能正常工作。这是一种实现相关的行为吗?我知道比较编译时已知的变量并不是很有用,但我的问题只是“为什么会这样?”
此外,使用auto
似乎也可以正常工作:
#include <iostream>
int main()
{
auto a = "whuiwhqohqweihqweohi";
auto b = "whuiwhqohqweihqweohi";
if (a == b) {
std::cout << "Yes" << std::endl;
}
else {
std::cout << "No" << std::endl;
}
return 0;
}
这段代码输出正确。这里的
a
和b
的类型是什么?请不要回答“使用std::string”。这与我的问题无关。