C++ line output

C++ line output

本文关键字:output line C++      更新时间:2023-10-16
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",另一个指向字符序列。编译器将字符序列放置在内存中,使字符序列"1"的地址在"0"的地址之前。

但是,对于字符串,运算符<(const string&, const string&( 被调用,正如预期的那样。

因为您正在比较两个指针(字符串 "1""0" 表示为 char 的数组,与指向字符的指针同义词(有点(。 如果要比较数字 0 和 1,则不需要引号。 否则,您需要一个字符串比较函数来比较字符串的内容,而不是它们的地址。 最好将它们包装在std::string中并使用 compare() 成员函数。