小编LxL*_*LxL的帖子

预取示例?

任何人都可以给出一个示例或链接到一个__builtin_prefetch在GCC 中使用的示例(或者通常只是asm指令prefetcht0)以获得实质性的性能优势吗?特别是,我希望这个例子符合以下标准:

  1. 这是一个简单,小巧,独立的例子.
  2. 删除__builtin_prefetch指令会导致性能下降.
  3. __builtin_prefetch用相应的内存访问替换指令会导致性能下降.

也就是说,我想要最简短的示例,显示__builtin_prefetch执行无需管理就无法管理的优化.

optimization assembly gcc prefetch

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

"extern C++"如何工作?

我跳了进去winnt.h,发现代码如下:

extern "C++" // templates cannot be declared to have 'C' linkage
template <typename T, size_t N>
char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N];
Run Code Online (Sandbox Code Playgroud)

我想问一下如下问题:

  1. extern "C++"工作怎么样?
  2. 这是GCC中的便携式和Clang吗?
  3. 是否可以使用此语法导出所有模板?

对于问题3,我的意思是我可以将模板的declearation和定义分开,然后为模板生成动态链接,而不使用这个技巧实际给出实现吗?

c++ templates extern

23
推荐指数
2
解决办法
1343
查看次数

在多个线程中使用std :: cout

我在c ++ 11中编写了一个用于测试Thread的简单程序,但是std::cout没有按照我的预期工作.

class Printer
{
public:
    void exec()
    {
        mutex m;
        m.lock();
        cout<<"Hello  "<<this_thread::get_id()<<endl;
        chrono::milliseconds duration( 100 );
        this_thread::sleep_for( duration );
        m.unlock();

    }
};

int main()
{
    Printer printer;

    thread firstThread([&printer](){
        while(1)
            printer.exec();

    });
    thread secondThread([&printer](){
        while(1)
            printer.exec();
    });

    firstThread.join();
    secondThread.join();     
}
Run Code Online (Sandbox Code Playgroud)

一些结果:

Hello 11376
Hello 16076
Hello 16076
Hello Hello 11376
16076
Hello 11376
,....
Run Code Online (Sandbox Code Playgroud)

我使用互斥锁来锁定线程,所以我无法理解为什么两个线程同时执行std::cout.它接缝非常适合我.任何人都可以解释发生了什么!?!

c++ multithreading mutex c++11 stdthread

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

为什么我们需要在移动构造函数中将rvalue引用设置为null?

//code from https://skillsmatter.com/skillscasts/2188-move-semanticsperfect-forwarding-and-rvalue-references
class Widget {
public:
    Widget(Widget&& rhs)
        : pds(rhs.pds) // take source’s value
    { 
        rhs.pds = nullptr;  // why??
    }

private:
    struct DataStructure;
    DataStructure *pds;
};
Run Code Online (Sandbox Code Playgroud)

我不明白设置的原因rhd.pdsnullptr.

如果我们删除此行会发生什么: rhs.pds = nullptr;

c++ rvalue-reference move-constructor move-semantics c++11

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

如何检查所有可变参数模板参数是否具有特殊功能?

说明:

检查模板参数中是否存在特殊运算符很容易(借助此答案).

以下代码检查是否char operator[]存在Type:

template <class Type>
class HasStringOperator
{
    template <typename T, T> struct TypeCheck;

    typedef char Yes;
    typedef long No;
    template <typename T> struct operator_{
        typedef char (T::*fptr)(int);
    };

    template <typename T> static Yes HasOperator(TypeCheck< typename operator_<T>::fptr, &T::operator[] >*);
    template <typename T> static No  HasOperator(...);

public:
    static bool const value = (sizeof(HasOperator<Type>(0)) == sizeof(Yes));
};
Run Code Online (Sandbox Code Playgroud)

ideone

问题:

现在我想检查我的所有可变参数模板参数是否都有该运算符.我无法弄清楚如何逐个发送它们HasStringOperator并检查整个结果.

template < class... Word>
class Sentence
{
    static_assert(Do all of Words have …
Run Code Online (Sandbox Code Playgroud)

c++ templates function variadic-templates c++11

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

为什么移动const对象有效?

我有一个简单的代码:

const std::vector<int> data = {1,2,3};
std::vector<int> data_moved=std::move(data);
for(auto& i:data)
    cout<<i;//output is 123
Run Code Online (Sandbox Code Playgroud)

它编译没有任何错误或警告!

似乎data 仍然有它的价值!

移动const值似乎不正确,因为我们无法修改const对象那么代码是如何编译的?

c++ move move-semantics c++11

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

用lambda创建unordered_set

我怎么unordered_set用lambda做?(我知道如何使用用户定义的哈希结构和它operator==)

我目前的代码是:

#include <unordered_set>
#include <functional>

struct Point
{
    float x;
    float y;
    Point() : x(0), y(0) {}
};

int main()
{
    auto hash=[](const Point& pt){
        return (size_t)(pt.x*100 + pt.y);
    };
    auto hashFunc=[&hash](){
        return  std::function<size_t(const Point&)> (hash);
    };
    auto equal=[](const Point& pt1, const Point& pt2){
        return ((pt1.x == pt2.x) && (pt1.y == pt2.y));
    };
    auto equalFunc=[&equal](){
        return std::function<size_t(const Point&,const Point&)> (equal);
    };
    using PointHash=std::unordered_set<Point,decltype(hashFunc),decltype(equalFunc)>;

    PointHash Test(10,hashFunc,equalFunc);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给我几个!错误数量(实时):

请注意,我为返回std::function (equalFunc …

c++ hash lambda unordered-set c++11

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

对T的initializer_list <T>赋值运算符要求

我想知道是否 initializer_list<T>要求T有一个赋值运算符.下列

struct Foo
{
    Foo& operator=( const Foo& ) = delete;
};

std::vector<Foo> f = { Foo( ), Foo( ) };
Run Code Online (Sandbox Code Playgroud)

在clang 3.4.2上编译但在Visual Studo 2013上失败了"error C2280: 'Foo &Foo::operator =(const Foo &)' : attempting to reference a deleted function".我假设clang在这里是正确的,但是想检查没有要求T可以分配.

c++ initializer-list c++11

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

cin.get()和cin.getline()之间的区别

我是编程新手,我在C++中有一些问题get()getline()功能.

我对这两个功能的理解:

getline()函数读取整行,并使用Enter键传输的换行符来标记输入的结束.该get()函数很像getline()但不是读取并丢弃换行符,而是get()将该字符留在输入队列中.

我正在读的书(C++的Primer Plus)是使用暗示get()getline().我的困惑是,它不会getline()get()确保最终更安全'\n'.另一方面,get()只会挂起输入队列中的字符,从而可能导致问题?

c++ get cin getline

7
推荐指数
3
解决办法
4万
查看次数

将QVideoFrame转换为QImage

我想从a获取每个帧QMediaPlayer并将其转换为QImage(或cv::Mat)

所以我使用了 videoFrameProbed来自的信号QVideoProbe:

connect(&video_probe_, &QVideoProbe::videoFrameProbed, 
         [this](const QVideoFrame& currentFrame){
   //QImage img = ??
}
Run Code Online (Sandbox Code Playgroud)

但我没有发现任何方式获得QImage来自QVideoFrame!

我怎样才能转换QVideoFrameQImage?!

c++ qt qimage

7
推荐指数
2
解决办法
7779
查看次数