小编Bos*_*gan的帖子

为什么在这种情况下不调用复制构造函数?

这是一个小代码片段:

class A
{
public:
    A(int value) : value_(value)
    {
        cout <<"Regular constructor" <<endl;
    }

    A(const A& other)   : value_(other.value_)  
    {
        cout <<"Copy constructor" <<endl;
    }

private:
    int value_;
};
int main()
{
    A a = A(5);
}
Run Code Online (Sandbox Code Playgroud)

我假设输出将是"常规构造函数"(对于RHS),后面是LHS的"复制构造函数".所以我避免使用这种风格并始终将类的变量声明为A a(5);.但令我惊讶的是上面的代码从未调用过复制构造函数(Visual C++ 2008)

有没有人知道这种行为是由编译器优化,还是C++的一些记录(和可移植)功能引起的?谢谢.

c++ constructor copy-constructor

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

在模板特化的情况下,编译器是否允许忽略内联?

假设你有简单的模板函数(为了简单起见,不是类成员),在同一个.h文件中具有特定于类型的特殊化...

template <class TYPE>
void    some_function(TYPE& val)
{
    // some generic implementation
}

template <>
inline void some_function<int>(int& val)
{
    // some int specific implementation
}
Run Code Online (Sandbox Code Playgroud)

除非您明确地将编译器指向特化inline(inline关键字),否则如果.h文件被包含多次,则会出现链接错误(至少我在Visual C++ 2008中这样做).
我们都知道这inline只是对编译器的建议,它可以忽略.在这种特殊情况下,编译器是否允许忽略此建议并让链接器失败?

c++ compiler-construction templates

5
推荐指数
2
解决办法
2377
查看次数