首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在求职面试中提出的问题

在求职面试中提出的问题
EN

Stack Overflow用户
提问于 2015-07-31 06:22:33
回答 5查看 591关注 0票数 1

我参加了一次面试,在面试中我被问到了两个我无法解决的问题。我想知道下面两段代码的问题是什么

第一个问题:

问题是:下面的代码有什么问题?

代码语言:javascript
复制
class A
{
    // Some properties ans methods
};

class B
{
    // Some properties ans methods
};

void foo(A* pa, B* pb)
{
    //Do somthing with pa and pb
};

void main()
{
    A* pa = NULL;
    B* pb = NULL;
    foo(pa = new A, pb = new B);
}

第二个问题:

问题是:打印的是什么(最终,面试官告诉我答案是17和0,但我不明白为什么)

代码语言:javascript
复制
int counter = 0; //Global variable

int foo()
{
    int i = 0;
    while (i < 12)
    {
        // Do somthing
        counter++;
        i++;
    }
    return 17;
}

void main()
{
    printf("Foo() = %d , counter = %d", foo(), counter);
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-07-31 06:32:59

在程序中有两件事是错误的,都是同一个问题,我将首先处理最大的一个问题。

void main()不是有效的C++!main()必须返回intBjarne Stroustrup自己这么说的!

第二个问题是C++不指定函数参数的求值顺序。,这意味着这两个程序都有潜在的问题。

代码语言:javascript
复制
foo(pa = new A, pb = new B);

AB可能首先得到分配(不管是哪一个),如果另一个在分配期间抛出异常,则会泄漏内存。两个对象都应该先创建,然后传递到foo中。当然,您可以使用智能指针;)

代码语言:javascript
复制
printf("Foo() = %d , counter = %d", foo(), counter);

counter可以是0,也可以是12。这取决于counter是在foo之前计算,还是在C++未指定的情况下进行计算。同样,您应该首先运行foo,存储值,然后使用printf。但是,当然,无论如何,您都会使用std::stringstream

票数 13
EN

Stack Overflow用户

发布于 2015-07-31 06:26:37

您可以挑剔这两个程序,但两者都是无效的,因为没有定义有效的入口点。

代码语言:javascript
复制
void main()

这不是程序的有效C++入口点。因此,整件事都是未定义的行为。

这可能不是面试官想知道的,但不要接受那些基本错误的人的琐碎问题。

票数 7
EN

Stack Overflow用户

发布于 2015-07-31 06:34:23

对于第二个问题,未指定printf()将打印计数器的012foo()counter的计算顺序未指定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31739353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档