2015-05-08 73 views
0

使用省略号在接受采访时有人问我以下问题代码未被泄露时的编译和执行;在代码

考虑下面的代码片段,其中省略号(...)表示没有被透露给你的代码:

class X { … }; class Y { public: explicit Y(const X& x); … }; 

什么都可以你说下面的每一个陈述的汇编和执行?描述该代码执行时发生的每个操作。

Y func(Y y) { … } 
X x; 
Y y = func(Y(x)); 

我无法正确理解问题,因此无法回答。如果有人能够解释我对我的期望有什么答案,或者分享我可以经历的任何链接,那将非常好。非常感谢。

+3

这种情况下的省略号可能意味着未公开的部分是不相关的。 –

+0

省略号在C++中对可变参数函数(http://en.cppreference.com/w/cpp/utility/variadic)和C++ 11可变参数模板(http://en.wikipedia.org/wiki/Variadic_template)有效。 。但这不是他们在这里的意思。在这种情况下,他们的意思是“假设纸上的所有内容都与问题无关”。 –

回答

1

也许...意味着可能有一些代码,这可能会影响代码的编译和执行?

什么是发生在代码:

  • X默认构造函数被调用时,
  • func(Y(x))被称为:Y(x)构造函数显式调用从x创建ÿ对象。

汇编代码取决于(其中包括)有关XY构造,例:

  • 添加专用的默认构造函数来X防止代码编译,
  • 加入私人拷贝构造函数来Y防止编译代码。
1

线Y func(Y y) { … }只能工作如果Y至少复制或移动构造,否则你就没有从函数返回或传递参数到它的方式。

X x只有在X有默认构造函数时才有效。

Y y = func(Y(x));只会在Y复制或移动构造函数时才起作用。

Here就是一个例子。