相关疑难解决方法(0)

什么是复制省略和返回值优化?

什么是复制省略?什么是(命名)返回值优化?他们意味着什么?

它们会在什么情况下发生?有什么限制?

c++ optimization c++-faq return-value-optimization copy-elision

350
推荐指数
4
解决办法
7万
查看次数

使用模板化构造函数时禁用默认复制构造函数和分配构造函数

我正在尝试创建一个可复制的类,具体取决于其模板参数(bool Copyable),否则它只能移动。

myclass(myclass&&)myclass(myclass const&)通过模板参数启用时,它应该可以从类型本身(默认构造函数)构造bool Copyable

它还可以myclass使用其他模板参数进行构造,我当前的实现通过模板化构造函数和赋值运算符涵盖了这一点。

这里使用零规则通过继承的copyable辅助结构生成默认构造函数和赋值运算符,当为 false 时,该结构将禁用复制构造函数和复制赋值运算符bool Copyable

template<bool>
struct copyable { };

template <>
struct copyable<false>
{
    // Disables copy construct & copy assign
    copyable() = default;
    copyable(copyable const&) = delete;
    copyable(copyable&&) = default;
    copyable& operator=(copyable const&) = delete;
    copyable& operator=(copyable&&) = default;
};

template<typename A, typename B, typename C>
struct storage_t
{
    // Implementation depends on A, B and C
};

template<typename A, typename B, …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++14

5
推荐指数
1
解决办法
990
查看次数

C++模板类语法

在我的课堂上,我们正在研究C++ 98,所以我试图找到合适的语法.

如何写出声明:

template <class T>
class A{
public:
    A();
    A(const A &rhs);
    A &operator=(const A &rhs);
};
Run Code Online (Sandbox Code Playgroud)

或者应该是这样的:

template <class T>
class A{
public:
    A();
    A(const A<T> &rhs);
    A &operator=(const A<T> &rhs);
};
Run Code Online (Sandbox Code Playgroud)

我想两者的实现是一样的.

它们彼此不同吗?

c++ templates c++98

4
推荐指数
1
解决办法
97
查看次数