小编T33*_*33C的帖子

C++ - 当应用于方法时,volatile表示什么?

如果我有一个C++方法声明如下:

class A
{
public:
   double getPrice() volatile;
};
Run Code Online (Sandbox Code Playgroud)
  1. volatile这里有什么代表?
  2. 它可以用于什么?

您可能会感兴趣的这种由安德烈Alexandrescu的多布斯博士的文章.我曾是 :)

编辑: 那篇文章写了一段时间,现在似乎社区已经开始了.香草萨特有这说这个.谢谢Iain(和Herb!)

mlimber他指出,Andrei在这里有一篇后续文章,他继续提倡使用不稳定的正确性作为检测支持POSIX类互斥体的系统上的竞争条件的有用工具.

c++ volatile

21
推荐指数
3
解决办法
6359
查看次数

如何在依赖的静态库中链接Boost

在MS Visual C++ 2010中

我的解决方案中有一个C++项目,它使用了boost并且工作得很好.

然后,我决定将此项目转换为静态库,并创建一个依赖于此静态库的新项目.

现在,我转换的静态库构建没有错误和警告(编译器和链接器),但新项目编译但不链接.

我正进入(状态:

1>LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc100-mt-1_45.lib'
Run Code Online (Sandbox Code Playgroud)

作为测试,我添加了该库的链接器选项的完整目录路径......然后它抱怨了

1>LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc100-mt-1_45.lib'
Run Code Online (Sandbox Code Playgroud)

我现在已经添加了所有库的完整路径,现在它已构建并运行.

我对这个解决方案不满意,因为:

  1. 我不希望库的用户不必担心在boost中链接.
  2. 这很乱

我知道答案是创建一个DLL,但有一种方法可以静态地执行此操作并保持链接在我的静态库级别.

编辑:

如果我告诉.exe链接器显式忽略boost libs那么一切都没问题,除了.exe根本不用担心boost.

/NODEFAULTLIB:"libboost_thread-vc100-mt-1_45.lib" /NODEFAULTLIB:"libboost_date_time-vc100-mt-1_45.lib"
Run Code Online (Sandbox Code Playgroud)

c++ linker boost visual-studio-2010

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

efilogin-helper在MacBook Pro上以高CPU连续运行

launchd启动了一个名为efilogin-helper的进程,它以root身份运行,在高CPU负载下持续运行(60%到120%)

你知道这个过程是什么以及如何控制它吗?

关于谷歌的信息令人惊讶.

另外,自己解决这些问题的好方法是什么?

macos process cpu-usage macos-sierra

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

输出迭代器适配器以计数但不复制

有各种STL算法依赖于输出迭代器来存储算法的结果.

例如,std::set_intersection将在输出迭代器中存储两个已排序范围之间的所有公共元素,然后对每个输出的元素进行后递增.

有时,我对实际元素不感兴趣,只对输出元素的数量感兴趣.在这种情况下,复制元素会浪费内存和性能.是否有一个迭代器适配器,我可以使用它来计算和避免元素的副本?如果没有,你能建议这种适配器的通用实现吗?

c++ iterator stl distance counting

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

处理设定间隔的算法

实现一个需要在C++中跟踪设置间隔的类的最佳方法是什么?我希望利用现有的STL或Boost库,但除了使用标准容器之外,我不得不求助于手动实现算法,这非常难以实现,我必须以某些性能为代价来简化它,因为工作最后期限.肯定有更好的办法.

例如,我需要以下类型的行为:

class SubRange
{
public:
SubRange(const T& lower_bound, const T& upper_bound);
...
};

Subrange r1(1,3);
Subrange r2(5,6);
Subrange r3(6,9);

Subrange tot = r1+r2+r3;
cout << tot;  //displays (1,3) (5,9)

Subrange gaps = SubRange(1,9) - tot;
cout << gaps; // displays (4,4)
Run Code Online (Sandbox Code Playgroud)

注释子范围由下限和上限组成,表示从下限到上限的连续元素集,其中两个边界都包含在集合中.从下限和递增(运算符++)开始构造集合,直到达到上限.

我已经看过Boost Interval处理区间运算并且似乎没有解决我的问题但是文档对我来说并不容易.如果有人认为它会有所帮助,那么他们可以告诉我如何实现上面的例子.

对于好奇.我的用例是代理服务器中的缓存算法,它需要跟踪客户端请求的数据的时间间隔,并且最好只询问服务器中尚未缓存的那些时间间隔部分.如果客户A要求2016年1月1日至2016年1月3日的数据,客户B要求提供2016年1月5日至2016年1月6日的数据,客户C要求提供2016年1月6日至9日的数据-Jan-2016,然后如果客户D要求2016年1月1日到2016年1月9日的数据,那么代理应该只询问服务器2016年1月4日,因为其余日期已经缓存.

c++ algorithm c++11 c++14

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

在类中实现移动语义的规范方法

我正在寻找一个很好的例子,说明如何使用移动语义实现派生类和基类。我想得越多,似乎默认的移动构造函数和赋值移动运算符通常都能完成这项工作,因为大多数标准 (STL) 类型和智能指针都是默认可移动的。

无论如何,如果我们有一个类层次结构,它需要一个明确的移动实现,我应该怎么做 - 至少作为第一次切割?

在这个例子中,我使用了一个原始指针,我通常将它包装在 std::unique_ptr 中,但我需要一个移动的例子,它不是默认可移动的。

任何帮助将非常感激。:)

目前,我做了以下尝试:

struct BlobA
{
    char data[0xaa];
};

struct BlobB
{
    char data[0xbb];
};

//----------------------------------------

class Base
{
public:

    //Default construct the Base class
    //C++11 allows the data members to initialised, where declared. Otherwise you would do it here.
    Base()
    {

    }

    //Define the destructor as virtual to ensure that the derived destructor gets called. (In case it is necessary. It's not in this example but still good practice.)
    virtual ~Base() …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14

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