您正在比较指针值,而不是字符串(注意:"cose" 与 "code" 是不同的文字,¹保证给出不同的指针)。
使用来自<string> 标头的std::string 来获得有意义的字符串操作。
那么你也可以使用像"code"s这样的字面量。
#include <iostream>
#include <string>
using namespace std;
auto main() -> int
{
cout << boolalpha;
cout << ("t"s < "c"s) << endl;
cout << ("c"s < "t"s) << endl;
cout << ("code"s < "test"s) << endl;
cout << ("test"s < "cose"s) << endl;
}
正式的问题中的代码,
cout<<("t"<"c")<<endl;
cout<<("c"<"t")<<endl;
cout<<("code"<"test")<<endl;
cout<<("test"<"cose")<<endl;
…具有实现定义的行为,因为
C++11 §5.9/2 2nd 破折号(expr.rel):
” 如果两个相同类型的指针p 和q 指向不同的对象,这些对象不是同一对象的成员或同一数组的元素或不同的函数,或者如果其中只有一个为空,p<q、p>q、p<=q 和p>=q 的结果未指定。
但是,您可以通过std::less 和家人以明确定义的方式比较这些指针,因为
C++11 20.8.5/8(比较):
” 对于模板greater、less、greater_equal 和less_equal,任何指针类型的特化都会产生一个总顺序,即使内置运算符@987654339 @、>、<=、>= 不要。
但是在第三只手上,虽然指针比较在某些情况下很有用,但您可能想要比较字符串文字。标准库提供例如strcmp 为了做到这一点。但最好使用std::string,如开头所述。
文字"code" 表示char 值的不可变空终止字符串。最后一个空字节共有五个char 值。因此类型是char const[5]。
作为在需要指针的上下文中使用的表达式,表示此数组的表达式(即"code" 文字)衰减为指向第一项的指针,char const* 指针。
这是数组表达式到指针的通常衰减,但在 C++03 和更早的版本中,还有一个用于文字的特殊规则,允许衰减到 char*(没有 const)。
注意事项:
¹ 两个相同的字符串文字可以给出不同的指针或相同的指针,具体取决于所使用的编译器和选项。