0

我写了一个非常基本的程序,但无法理解它的行为。

     # include<stdio.h>
     # include<iostream.h>
     # include<conio.h>

     using namespace std;
     int main()
     {
       cout << "50" << oct <<"50" << hex <<"50" << abc << "50";// error abc not defined
       cout << "50" << oct <<"50" << hex <<"50"; // No error output 505050
       getch();   
    } 

oct在我包含的任何文件中是否hex定义为某个宏,这就是为什么我没有收到第二条cout语句错误的原因?

4

3 回答 3

6

oct并且hex是在 中定义的流操作<ios>符,而abc不是任何标准头中定义的符号。因此,您只看到有关abc的错误,因为您没有在程序中自己声明它。

除此之外,您似乎使用的是非常旧的编译器,它带有<iostream.h>. 我建议您更新您的编译器(或切换到更好的编译器),并使用<iostream>不是<iostream.h>标准头文件。

于 2012-04-29T06:37:13.280 回答
3

你在这里犯了一个大错误。你不应该仅仅通过阅读源代码和实验来学习 C++。这是一条不会带你去任何地方的道路。

尝试学习 C++ 的唯一方法是获得一本好书并从头到尾阅读。

C++ 在很多地方都是不合逻辑的,无论你多么聪明,你都无法正确猜出所有的 C++。实际上过于聪明可能是一个猜测问题,因为在某些情况下,C++ 语言设计包含由于向后兼容性原因而无法删除的真正错误。如果你很聪明,你的猜测将是合乎逻辑的......而且完全错误。

另请注意,虽然您通常可以编写几行清晰且外观合理的 C++ 行,它们将有效地做出正确的事情,但也很可能编写另外几行更加合乎逻辑和美观的代码,但性能却很糟糕和/或未定义的行为。

未定义的行为也意味着当你在很多情况下犯了错误时,编译器和运行时不会抱怨,一段时间后事情就会开始变得疯狂。未定义的行为正是实验不是学习 C++ 的好途径的真正原因。

于 2012-04-29T06:49:49.927 回答
1

hex并且oct是包含在std命名空间中的操纵器。他们的全名实际上是std::hexand std::oct。没有名为 的操纵器abc,这就是您收到错误的原因。

更多信息请访问www.cplusplus.comstd::hexstd::oct

于 2012-04-29T06:39:24.760 回答