C++ line output
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",另一个指向字符序列。编译器将字符序列放置在内存中,使字符序列"1"的地址在"0"的地址之前。
但是,对于字符串,运算符<(const string&, const string&( 被调用,正如预期的那样。
因为您正在比较两个指针(字符串 "1"
和 "0"
表示为 char
的数组,与指向字符的指针同义词(有点(。 如果要比较数字 0 和 1,则不需要引号。 否则,您需要一个字符串比较函数来比较字符串的内容,而不是它们的地址。 最好将它们包装在std::string
中并使用 compare()
成员函数。
相关文章:
- 以某种方式告诉编译器"Do not process line of code"
- ( [ ]( ){ output;}); 是什么意思?
- diff: output.txt: 没有这样的文件或目录
- 从生成文件编译错误:"Unable to open output file" ..."No such file or directory"
- 'Cannot output file filename.exe Permission denied' C++ 代码::块中的错误
- 注册 Clang 检查器时出错:"out-of-line-definition of register"
- :<command-line>0:3:警告:ISO C++11 要求宏名称后有空格
- 如何修复"(Song Title) is not recognized in output screen"
- Command Line Arguments wxCmdLineArgsArray in wxWidgets
- C++ library output
- 我需要用c ++ 98重写c ++ 11代码,c ++ 11正在使用lambda函数[&](const Output & o
- qt graphicsscene line subclass
- Xcode 8.3 command line C++
- g++ 在我尝试用 ONE LINE 编译程序时崩溃了
- gradle see output for model.components.binaries.all
- 我在下面的代码上收到错误"Output Limit Exceeded"
- Output UTF-8 (u8) std::string
- QSTACKEDWIDGET区域在Child Widget Line编辑中在ESC上清除
- 这一行是怎么回事: istringstream is( line );
- C++ line output