小编Alw*_*ing的帖子

我是否需要知道算法的代码才能利用插入器并移动迭代器?

C++ Primer(第5版)通过将一个insertermove iterator一个常规迭代器传递给一个std通用算法,给出了一些实现好效果的例子.

但是,我怀疑能够做到这一点取决于算法工作的内部知识,即它对迭代器参数的确切作用.这更加严重move inserter,因为我们需要确保在移动对象后不会访问它.

我的怀疑是否合理?如果是,那么标准库如何采用一种方法,要求客户(我)知道提供者的内部(STL)?

c++ stl c++11

4
推荐指数
2
解决办法
179
查看次数

static_assert 在哪里实现?

该方式static_assert是在Loki库中实现的(它实际上是一个名为 的预处理器宏),它可以按如下方式使用:STATIC_CHECK

STATIC_CHECK(myCondition, My_Error_Message); 
Run Code Online (Sandbox Code Playgroud)

请注意,My_Error_Message必须是有效的标识符。

我想知道标准是如何static_assert实现为C++11错误消息采用字符串文字参数的。

我决定查看type_traits包含文件,该文件位于/usr/include/c++/4.8我的 Ubuntu 14.04 和 g++ 4.8.2 中。令我惊讶的是,我只找到了static_assert那里的用法,而不是定义(也不是预处理器宏)。我没有在其中包含的文件中找到它type_traits

那么,我在哪里寻找static_assert?

type-traits c++11

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

什么是聚合类?

我刚刚在第298页的C++ Primer(第5版)中阅读了以下定义:

在以下情况下,类是聚合:

  • 它的所有数据成员都是公开的

  • 它没有定义任何构造函数

  • 它没有类内初始化器

  • 它没有基类或虚函数

本文还提供了一个定义:什么是聚合和POD以及它们如何/为何特殊?.

毕竟我在本书的前几节中读到了封装的价值,我想知道:为什么有人想要使用聚合类?(顺便说一句,这个问题似乎适用struct于一般情况:我为什么要public:默认拥有?)

c++

3
推荐指数
2
解决办法
5114
查看次数

如何阅读模板部分专业化?

假设以下声明:

template <typename T> struct MyTemplate;
Run Code Online (Sandbox Code Playgroud)

以下部分特化的定义似乎使用相同的字母T来表示不同的类型.

template <typename T> struct MyTemplate<T*> {};
Run Code Online (Sandbox Code Playgroud)

例如,让我们进行具体的实例化:

MyTemplate<int *> c;
Run Code Online (Sandbox Code Playgroud)

现在,再次考虑上面部分特化的定义:

template <typename T> struct MyTemplate<T*> {};
Run Code Online (Sandbox Code Playgroud)

在这一行的第一部分(即template <typename T>),Tint *.在线的第二部分(即MyTemplate<T*>),Tint!

那么,部分专业化的定义如何读取?

c++ templates partial-specialization c++11

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

有“make”回显标准错误而不重定向吗?

我运行的程序中的一些目标Makefile,其输出(它们发送到stdout)是我感兴趣的。由于我不知道的原因, 的作者make决定将执行的命令回显到stdout,这会污染后者。

这里建议了一种解决此问题的硬方法,其中涉及交换文件描述符。我想知道是否有一种更简单的方法来强制makeecho 到stderr.

我浏览了man的页面make,但除了选项之外没有找到任何与此目的相关的内容-s。我更喜欢保留命令的回显,但将其放在stderr.

我还尝试创建一个辅助目标(我将其作为所有其他目标的先决条件),我在其中放置了:

exec 3>&2
exec 2>&1
exec 1>&3
Run Code Online (Sandbox Code Playgroud)

但 bash 抱怨 3 不是有效的文件描述符。我只是尝试过exec 1>&2,但没有任何效果......

bash makefile

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

C ++中的多个或单个名称空间名称

假设我们有一个包含几个策略类的名称空间:

namespace loggingPolicy {
    class OnWrite {...};
    class OnReadWrite {...};
    etc.
} // namespace
Run Code Online (Sandbox Code Playgroud)

这个名字LoggingPolicy::OnWrite很有意义。另一方面,此名称空间实际上是类的集合,而名称loggingPolicies将更好地反映这一点。应该选择哪一个?

尽管我通常不遵循《 Google C ++样式指南》,但确实查找了名称空间的命名约定,但是在此问题上没有任何话要说。

PS:我正在从事一个独立项目,并且不受任何组织准则的约束。但是,我的框架有望被许多人使用,因此好的书写方式很重要。

c++ namespaces naming-conventions

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

是否应该避免这种从 int 到 double 的静态转换?

考虑:

int total = 14; // something for which double does not make sense
int nPeople = 5;
double perCapita = static_cast<double>(total) / nPeople; // should this cast be avoided?
Run Code Online (Sandbox Code Playgroud)

在这种情况下应该避免铸造吗?是写好1.0 * total / nPeople还是别的好?

c++ casting

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

在这段代码中 delete[] free 是否正确?

考虑以下使用动态分配的二维数组的方式(由于某种原因,这里的回复中没有出现这种方式):

const int nRows = 2, nCols = 3;
int (*arr)[nCols] = (int(*)[nCols])(new int[nRows * nCols]);
arr[1][1] = 2;
std::cout << arr[1][1] << endl;
delete[] arr;
Run Code Online (Sandbox Code Playgroud)

delete[]在这种情况下,最后一行是否正确释放了内存?

c++ dynamic-memory-allocation

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

PayPal 按钮的水平布局

我想按照文档中的描述水平排列 PayPal 和信用卡按钮。当我垂直堆叠它们时,两个按钮都显示得很好。但是,信用按钮不会在水平布局中显示......

<PayPalButtons 
    style={{
    layout: 'horizontal',
    color:  'silver',
    shape:  'pill',
    label:  'pay',
    tagline: false,
    height: 30}} 
    createOrder={(data, actions) => 
                 {return onCreate(data, actions);}}
    onCancel={() => onCancel()}
    onError={(err) => onError()}
    onApprove={(data, actions) => onSuccess(data, actions)}
/>
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

css paypal paypal-sandbox paypal-buttons

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

重载赋值运算符与提供隐式构造函数

我刚刚在《C++ Primer (第五版)》第 563 页上了解到,可以重载赋值运算符。因此,如果我正在编写一个类C,并且将整数分配给此类的对象是有意义的,那么我可以提供一个rhsof 类型的赋值运算符int。然后我班的客户可以写:

C c;
...
c = 5;
Run Code Online (Sandbox Code Playgroud)

问题:如果这样的赋值有意义,那么隐式构造函数C(int);也应该有意义吗?如果是这样,那么我应该真正定义这个构造函数(它也有其他用途)并且永远不需要重载赋值运算符。我错过了什么吗?

c++ constructor operator-overloading assignment-operator

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