繁体   English   中英

C ++行输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM