如何在C++中的main()内部声明什么,并在编译后有一个工作的应用程序?

Rik*_*ika 85 c++

在一次采访中,我遇到了一个问题:

您的朋友给了您一个源代码文件,该文件在控制台上打印斐波那契数字.请注意,main()块为空,并且其中没有任何语句.

解释这是如何可能的(提示:全局实例!)

我真的想知道这个,这样的事情怎么可能!

Naw*_*waz 127

它很可能被实现为(或其变体):

 void print_fibs() 
 {
       //implementation
 }

 int ignore = (print_fibs(), 0);

 int main() {}
Run Code Online (Sandbox Code Playgroud)

在此代码中,ignore必须在进入main()函数之前初始化全局变量.现在,为了初始化全局,print_fibs()需要在可以执行任何操作的地方执行 - 在这种情况下,计算斐波纳契数字并打印它们!我在下面的问题中已经表现出类似的事情(我曾经问过很久):

请注意,此类代码不安全,一般应最好避免使用.例如,执行std::cout时可能无法初始化对象print_fibs(),如果是,那么std::cout函数中会做什么?但是,如果在其他情况下,它不依赖于这样的初始化顺序,那么调用初始化函数是安全的(这是C和C++中的常见做法).

  • +1表示如何在没有课程的情况下完成此操作. (13认同)
  • @Nawaz这可能值得引用确切的保证.保证翻译单元内的对象按顺序初始化.保证在`std :: ios_base :: Init`对象的第一次初始化之前或期间初始化标准流对象.并且`<iostream>`保证表现为"好像"它在命名空间范围内包含一个`std :: ios_base_Init`对象的实例. (3认同)
  • @ Steve314:它没有返回任何我使用逗号运算符的原因,以确保整个表达式`(print_fibs(),0)`的类型是`int`.这是[在线演示](http://ideone.com/tBVB2l). (3认同)

Sak*_*ham 18

希望这可以帮助

class cls
{
  public:
    cls()
    {
      // Your code for fibonacci series
    }
} objCls;

int main()
{
}
Run Code Online (Sandbox Code Playgroud)

因此,只要声明了类的全局变量,就会调用构造函数并在那里添加逻辑以打印出Fibonacci系列.


Mr.*_*eer 9

对的,这是可能的.您需要声明一个对象的全局实例,该对象计算对象构造函数中的Fibonacci数.

  • 您需要声明一个对象的全局实例,其初始值设定项计算Fibonacci数. (6认同)