小编Pai*_*ait的帖子

外部内联函数会发生什么?

如果我在.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 compiler-construction linker inline header

13
推荐指数
2
解决办法
2万
查看次数

三元运算符的结果不是右值

如果使用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)

这是关于ideone演示.

我用gcc 4.7.0和MSVC10试了一下.两者的行为方式相同.
我猜这种情况发生的原因是:
三元运算符类型是一个左值,因为它在执行return语句之前被计算.此时a和b还不是xvalues(即将到期).
这个解释是否正确?

这是标准中的缺陷吗?
在我看来,这显然不是预期的行为和非常常见的情况.

c++ rvalue ternary c++11

11
推荐指数
2
解决办法
607
查看次数

标签 统计

c ×1

c++ ×1

c++11 ×1

compiler-construction ×1

header ×1

inline ×1

linker ×1

rvalue ×1

ternary ×1