Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 你最喜欢的C++;成语?_C++_Idioms - Fatal编程技术网

C++ 你最喜欢的C++;成语?

C++ 你最喜欢的C++;成语?,c++,idioms,C++,Idioms,可能重复: 成员语法-但我认为这没什么大不了的 但是,特别是对于重量级对象,我认为它几乎是一个理想的容器。你的exmaple:这是你的IDE应该帮助你的,而不是模糊的宏。+1是一个不错的问题,但是-1是一个非常糟糕的例子。Net零投票:)可能有很多重复:,。OP的例子可能更像是一个人AL成语,不是一个普遍接受的C++习惯用法吗?@ UncleBens,是的,这是我个人的成语。我认为不出名的个人习语可能更有趣。如果你需要两个嵌套for循环,如果使用你的宏,占位符VARS会发生冲突。+ 1 RA

可能重复:

<亲爱的C++粉丝,

你能列举一下你最喜欢的C++习语吗?最好列出那些有用但不知名的

首先,我把我的一个:

为了避免对(size_t i=0;i重复冗长的
,我使用如下宏:

#define LOOP(n) for (size_t _i = 0; _i < n; ++_i)
#为(size_t_i=0;_i
_i是bind使用的占位符

所以我可以写:

vector<int> coll(100);
LOOP (100)
{
    coll[_i] = _i;
}

LOOP (100)
{
    auto a = _i;
    LOOP (100)
    {
        auto b = _i;
        cout << a << b;
    }
}
向量coll(100); 环路(100) { coll[\u i]=\u i; } 环路(100) { 自动a=_i; 环路(100) { 自动b=_i; cout在我的列表中是最重要的。有那么多的情况下它会派上用场


像Andrei Alexandrescu这样的通用实现最有用。

如果需要确切的生存期范围,RAII+打开嵌套块:

Lock lock(this);
ResourceHolder resource(findResource());
WorkerHolder worker(resource);
if (!worker)
    return false; // frees the resource and unlocks the lock
{
    WorkAssignment assignment(worker);
    assignment.Execute();
} // assignment cleaned up even in case of exception
...

好的问题,但我认为你的例子是一个坏的!你的代码>循环< /Cord>宏没有使任何东西更清楚-它实际上隐藏了你的意图从不使用你的宏的程序员,它甚至不象C++一样我对你的片段的第一反应是“甚至是C++”还是“普通代码< <代码>什么地方错了?”。反复编写循环可能会很乏味,但我们都知道,每个人在阅读和维护代码上花费的时间都比一开始编写代码要多得多,因此为
编写完整的
绝非浪费时间,而且更加清晰。你可以继续论证你的观点,但你应该意识到,在这种情况下使用宏ay是而不是一种被广泛接受的技术-其他人看你的代码时也会叫你出来

无论如何,要添加一个实际的答案——我最喜欢的C++0x习惯用法是一个唯一的向量\u ptr:

std::vector<std::unique_ptr<T>> my_container;
std::vector my_容器;
它具有以下优点-本质上是指针的安全向量:

  • 它在O(1)时间内提供随机访问
  • 元素保证即使在重新分配时也不会在内存中移动(因此您可以安全地获取
    T
    s的地址并存储它们)
  • 对于排序之类的任务来说,速度很快(只是乱洗一些指针,而不是复制重量级对象)
  • 异常安全并有助于防止内存泄漏-元素上的擦除()也会释放内存
  • 灵活-您可以
    std::move()
它确实有一个或两个缺点:

  • 每个元素都分配在堆上,如果添加/删除大量元素,可能会影响性能,而且元素在丢失内存的缓存位置上可能相距很远
  • 迭代需要双间接
    (*i)->成员
    语法-但我认为这没什么大不了的

但是,特别是对于重量级对象,我认为它几乎是一个理想的容器。

你的exmaple:这是你的IDE应该帮助你的,而不是模糊的宏。+1是一个不错的问题,但是-1是一个非常糟糕的例子。Net零投票:)可能有很多重复:,。OP的例子可能更像是一个人AL成语,不是一个普遍接受的C++习惯用法吗?@ UncleBens,是的,这是我个人的成语。我认为不出名的个人习语可能更有趣。如果你需要两个嵌套for循环,如果使用你的宏,占位符VARS会发生冲突。+ 1 RAII是我真正希望的其他语言支持的C++。+ 1用于RAII和应答。速度。我就知道你会这么说D@Nawaz当前位置我想说RAII,但有人已经提到了。我必须说出一些不同的名称。@Nawaz:有人对德雷德法官看得太多了:)