小编not*_*ien的帖子

使用列表初始化(花括号)分配矢量大小

我怎样才能做到平等:

#include <vector>

size_t bufferSize = 1024 * 1024;
std::vector<unsigned char> buffer(bufferSize, ' ');
Run Code Online (Sandbox Code Playgroud)

使用列表(花括号)初始化?

当我尝试执行以下操作时:

#include <vector>

size_t bufferSize = 1024 * 1024;
std::vector<unsigned char> buffer {bufferSize, ' '};
Run Code Online (Sandbox Code Playgroud)

它错误地解释bufferSize为要存储在容器的第一个索引中的值(即调用错误的std::vector构造函数),并且由于从unsigned int(size_t)到()的转换无效而无法编译unsigned char.

c++ c++11 list-initialization

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

我应该将lambda或functor用于比较功能吗?

我将C ++ 03项目重构为C ++ 11。

我有一个类,其中定义了一个仿函数用于排序:

class Widget
{
public:

  class SortByRules
  {
  public:
    bool operator()(const Widget &lhs, const Widget &rhs) const;
  }
}
Run Code Online (Sandbox Code Playgroud)

在我的项目中,此仿函数在各个地方都使用过。用法示例:

std::vector<Widget> widgets;

// ...

std::sort(widgets.begin(), widgets.end(), Widget::SortByRules());
Run Code Online (Sandbox Code Playgroud)

据我了解,在C ++ 11中应优先使用lambda函数。但是我不确定在这种情况下是否应该坚持使用仿函数,因为我想在整个项目的其他多个类中调用它。

我正在考虑将其重构为以下内容:

// .h
class Widget
{
public:
 Widget();
 std::function<bool(Widget&, Widget&)> SortByRules;
};

// .cpp
Widget::Widget() :
SortByRules([](Widget& lhs, Widget& rhs) { /* ... */ }
{
}
Run Code Online (Sandbox Code Playgroud)

这两种实现方式基本相同吗?我是否应该优先选择另一个?如果是,为什么?

c++ refactoring c++11

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

当一个值是非常量但用常量表达式初始化时使用constexpr?

出于某种原因,我很难掌握如何正确使用constexpr.

标题中描述的情况是否适合使用它?即:

void foo()
{
    static constexpr const size_t MAX_BUFFER_SIZE = 20 * 1024 * 1024;

    constexpr size_t bufferSize = 1024 * 1024; // Initialized with constant expression
    std::vector<char> buffer(bufferSize, ' ');

    //...

    if (some_condition())
    {
        bufferSize = get_random_value_at_runtime(); // Assigned a new 'non-constexpr' value
        buffer.resize(bufferSize, ' ');
    }

    //...   
}
Run Code Online (Sandbox Code Playgroud)

亲切的问候!

c++ constexpr c++11

0
推荐指数
1
解决办法
78
查看次数

标签 统计

c++ ×3

c++11 ×3

constexpr ×1

list-initialization ×1

refactoring ×1