如果您想查看此问题的原始表现,请阅读"原始问题"部分.
简而言之:我正在修改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) 通常,我会编译一个需要特定库(例如数学)的程序,方法是在需要它的源之后传递链接器标志,如下所示:
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何时停止工作以及为什么?似乎不支持它会破坏旧包。
我今天在一些代码中看到了以下类型的结构:
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++ 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++ ×3
c++11 ×2
coding-style ×1
gcc ×1
linker ×1
performance ×1
pointers ×1
templates ×1
unique-ptr ×1
winapi ×1
windows ×1