我怎样才能做到平等:
#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 ++ 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)
这两种实现方式基本相同吗?我是否应该优先选择另一个?如果是,为什么?
出于某种原因,我很难掌握如何正确使用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)
亲切的问候!