C++ 比较条件中的字符串而不将其声明为字符串

C++ 比较条件中的字符串而不将其声明为字符串,c++,string-comparison,C++,String Comparison,以下条件显然是错误的 string e = "English", c = "Chemistry"; if (e < c) ... // this is False string e=“English”,c=“Chemistry”; 如果(e

以下条件显然是错误的

   string e = "English", c = "Chemistry";
   if (e < c) ... // this is False
string e=“English”,c=“Chemistry”;
如果(e
但无论顺序如何,以下证明都是正确的:

  if("English" < "Chemistry") ...//True

  if("Chemistry" < "English") ... //also True
if(“English”<“Chemistry”)…//正确
如果(“化学”<“英语”)//同样正确

为什么会这样?我不明白上面两个条件怎么都是真的。

比较的是指针的值。所以这取决于编译器

您需要使用strcmp或字符串的比较运算符。

字符串文字只是“C-String”,即指向字符的指针。由于它们是指针,您可以对它们使用一些算术运算符,但如果您在不同的机器上运行程序,或者只运行几次,您可能会得到不同的答案

如果要比较两个
std::string
,可以使用以下内容:

if (std::string("English") < "Chemistry")
if(标准::字符串(“英语”)<“化学”)
请注意,至少有一个字符串必须是
std::string

“English”
具有类型
const char[]
,该类型衰减为类型
char const*
:也就是说,它实际上是指向存储初始
E
的内存位置的指针

当你写作时

string e = "English"
您正在隐式调用由类型
string
定义的转换构造函数,该构造函数接受
char*
并创建
字符串

string e("English")
在这一点上,
e
等价于
e操作符
strcmp("English", "Chemistry") < 0  // false: English is not less than Chemistry