小编sta*_*anm的帖子

union对象就像一个结构

更新:

如果您想查看此问题的原始表现,请阅读"原始问题"部分.

简而言之:我正在修改C++联合对象的一个​​字段,但这对其他字段没有任何影响,它的表现非常像一个结构.对于解决方案:请参阅我的回答.

原始问题

tl; dr:不QueryPeformanceCounter应该QuadPart在提供的字段中返回它的值LONG_INTEGER而不是HighPart/ LowPart?我无法找到任何特定于系统的地方,但似乎是这样.

细节

我从Windows获得了一种奇特的行为QueryPeformanceCounter.仔细考虑这个非常简单的用法,紧跟微软的例子:

#include <windows.h>

bool test()
{
    LARGE_INTEGER start, end, freq;
    if (!QueryPerformanceFrequency(&freq)) {
        cout << "QueryPerformanceFrequency failed!\n";
        return false;
    }
    QueryPerformanceCounter(&start);

    Sleep(1000);  // Simulate work

    QueryPerformanceCounter(&end);
    cout << "range: from " << start.QuadPart << " to " << end.QuadPart << endl;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

range: from -3689348814741910324 to -3689348814741910324
Run Code Online (Sandbox Code Playgroud)

这似乎很随意,但事实并非如此.添加转储功能:

ostream& operator << (ostream& os, const LARGE_INTEGER& li) …
Run Code Online (Sandbox Code Playgroud)

c++ windows performance winapi performancecounter

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

gcc 中链接器标志的正确顺序是什么?

通常,我会编译一个需要特定库(例如数学)的程序,方法是在需要它的源之后传递链接器标志,如下所示:

gcc foo.c -lm
Run Code Online (Sandbox Code Playgroud)

然而,旧版本的 gcc 似乎在相反的顺序上同样工作得很好(我们称之为BAD ORDER):

gcc -lm foo.c
Run Code Online (Sandbox Code Playgroud)

如果我尝试编译的一些流行的开源项目没有使用后者,而我的版本gcc(或者这ld就是问题所在?)仅在前一种情况下工作(而且,正确的我认为之一)。

我的问题是: BAD ORDER何时停止工作以及为什么?似乎不支持它会破坏旧包。

linker gcc

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

具有模板参数大小与char指针的Const char数组

我今天在一些代码中看到了以下类型的结构:

template<unsigned int N> unsigned int f(const char (&a)[N]);
Run Code Online (Sandbox Code Playgroud)

有没有任何合理的观点来解决这个问题:

unsigned int f(const char *a);
Run Code Online (Sandbox Code Playgroud)

我模糊地理解后者的指针共享含义,但实际上是非常糟糕的,它需要被两倍大小的模糊代码所取代吗?

(不幸的是,我不能问作者的代码,否则我会)

c++ templates pointers c++11

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

在C++中使用unique_ptr进行转换

我有以下C++ 11构造:

#include <vector>
#include <memory>

class X {
public:
        void f(void) { }
};

class Y : public X {
public:
        void g(void) { }
};

class A {
private:
        std::vector <std::unique_ptr <X> > xs;
public:
        void addX(std::unique_ptr <X> &ref) {
                xs.push_back(std::move(ref));
        }
};

int main() {
        A a;

        std::unique_ptr <Y> y(new Y());
        y->f();
        y->g();

        std::unique_ptr <X> x(y.release());
        a.addX(x);

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

在main函数中,我试图构建一个Y类型的对象,然后将其添加到一个X对象的向量中.但是,我不能直接说a.addX(y)std::unique_ptr <Y>不能被强制转换为std::unique_ptr <X>&.这就是为什么我想出了一个解决方法,我使用释放的内部指针y初始化另一个唯一指针x.

虽然这有效,但它似乎不是最好的解决方案.是否有更好的方法将类型的对象作为类型std::unique_ptr<Y>的参数传递std::unique_ptr<X>&

谢谢, - 斯坦

c++ coding-style unique-ptr c++11

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