小编Ale*_*org的帖子

根据条件声明大变量的方法

我正在阅读C ++核心准则,并遇到了以下规则:“直到您有一个值对其进行初始化之前,都不要声明变量” https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#es22-dont-declare一个变量,直到您有一个值来初始化它

它描述以下代码为错误代码:

SomeLargeType var;

if (cond)   // some non-trivial condition
    Set(&var);
else if (cond2 || !cond3) {
    var = Set2(3.14);
}
else {
    var = 0;
    for (auto& e : something)
        var += e;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这一点未能描述解决该确切问题的方法。有时,您只需要根据条件不同地初始化大对象。我想到的唯一规避方法是:

SomeLargeType * var;

if (cond)   // some non-trivial condition
    var = new SomeLargeType(123);
else if (cond2 || !cond3) {
    var = new SomeLargeType(3.14);
}
Run Code Online (Sandbox Code Playgroud)

但是,即使我使用了智能指针,也感觉到不必要/不安全,最重要的是,这要比初始方法差。

最佳解决方案是什么?

c++

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

如何在没有复制构造函数的情况下为地图设置值?

必须将不可复制类的实例填充到地图中。例如使用此代码:

#include <map>

class NoCopyClass
{
    public:
        NoCopyClass() {};
        NoCopyClass(int value)  {};

        NoCopyClass& operator=(const NoCopyClass&) = delete;

};

int main()
{
    std::map<int, NoCopyClass> my_map;
    my_map[3] = NoCopyClass(20);
}
Run Code Online (Sandbox Code Playgroud)

除非您注释掉复制构造函数的删除,否则无法编译。你可以在这里试试:https : //onlinegdb.com/ByBh0NubU

当类不可复制时,添加新地图元素的正确方法是什么?

非常感谢!

c++ dictionary copy-constructor

3
推荐指数
1
解决办法
260
查看次数

标签 统计

c++ ×2

copy-constructor ×1

dictionary ×1