[英]C++ line output
cout << boolalpha ("1" < "0") << endl;
我最近正在编写这篇文章,作为我正在做的一些课程工作的分支。 当我执行它时,为什么这会产生true
?
cout << boolalpha (string("1") < string("0")) << endl;
按预期进行比较。
它是比较const char*
,标准未定义"1"
和"0"
的结果,而定义了2 std::string
s的比较,并且在这种情况下输出是预期的。
快速案例:
char* y = "0";
char* x = "1";
std::cout << (x<y) << endl;
//output 1 on my platform
和
char* x = "1";
char* y = "0";
std::cout << (x<y) << endl;
//output 0 on my platform
我正在指定“在我的平台上”,因为没有标准规则(但它可以是编译器规则)指向创建指针的位置或创建指针的顺序。
就我而言,地址的分配顺序与声明的顺序相反。
我愿意打赌,如果你跑:
cout << ("1" < "0") << endl;
和
cout << ("0" < "1") << endl;
你得到相同的输出(虽然这不是一个规则)。 请注意,您应该在程序的不同实例中运行它们。 如果在同一实例中运行它们,则可能会得到不同的结果,因为字符串文字位于内存中的单个位置。
表达式“1”<“0”比较两个指针的值。 一个指向字符序列“1”,另一个指向字符序列。 您的编译器将字符序列放在内存中,使char序列“1”的地址在“0”之前。
但是,对于字符串,将按预期调用operator <(const string&,const string&)。
因为你正在比较两个指针(字符串"1"
和"0"
表示为char
数组,synonymous(kinda)表示char
指针)。 如果要比较数字0和1,则不需要引号。 否则,您需要一个字符串比较函数来比较字符串的内容,而不是它们的地址。 最好是将它们包装在std::string
并使用compare()
成员函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.