如果我在.h文件中定义我的函数会发生什么
extern int returnaint(void);
Run Code Online (Sandbox Code Playgroud)
,在相关的.c文件中定义它
inline int returnaint(void) {
return 1;
}
Run Code Online (Sandbox Code Playgroud)
并将标题包含在另一个.c文件中并使用该函数?当我单独编译事物时,为每个.c文件创建一个目标文件然后链接它们,包括内联函数,或者会发生什么?
我知道编译器可以忽略inline,但如果它在这种情况下不忽略它怎么办?
如果使用C++ 11编译器编译此程序,则向量不会移出函数.
#include <vector>
using namespace std;
vector<int> create(bool cond) {
vector<int> a(1);
vector<int> b(2);
return cond ? a : b;
}
int main() {
vector<int> v = create(true);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果您返回这样的实例,则会移动它.
if(cond) return a;
else return b;
Run Code Online (Sandbox Code Playgroud)
我用gcc 4.7.0和MSVC10试了一下.两者的行为方式相同.
我猜这种情况发生的原因是:
三元运算符类型是一个左值,因为它在执行return语句之前被计算.此时a和b还不是xvalues(即将到期).
这个解释是否正确?
这是标准中的缺陷吗?
在我看来,这显然不是预期的行为和非常常见的情况.