为什么这样呢
#include <vector>
void f()
{
struct S
{
int first, second, third;
};
std::vector<S> vs;
}
Run Code Online (Sandbox Code Playgroud)
使用Visual C++ 2015,但不是使用g ++ 4.8.4?
有一个std::convertible_to<T>概念是检查调用结果是否可以转换为某种类型。
但我想检查函数是否具有确切的返回类型。我怎样才能做到这一点?
我想修改 32 位 DLL 的入口点。我已经尝试用...覆盖入口点
mov eax, OFFSET absolute_immediate
jmp eax
Run Code Online (Sandbox Code Playgroud)
...在此钩子模式中编码。
// mov eax, addr; jmp eax
static uchar_t hookPattern[] = { 0xB8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0 };
Run Code Online (Sandbox Code Playgroud)
该代码工作正常,但我想要一个相对跳转。
我尝试了这个钩子模式:
static uchar_t hookPattern[] = { 0xE9, 0x00, 0x00, 0x00, 0x00 }; // jmp REL32
Run Code Online (Sandbox Code Playgroud)
并像这样覆盖四个相对字节:
DWORD dwModify = (char *)&::myHook - (char *)entryPoint;
memcpy( hookPattern + 1, &dwModify, sizeof dwModify );
Run Code Online (Sandbox Code Playgroud)
但是如果我调用entryPoint,我会意外地重定向到运行时的一个完全不同的函数,但不会重定向到myHook。
我在计算相对偏移量时遗漏了一些东西吗?
我开发了一个类似于 Java for C++ 的监视器对象,并进行了一些改进。主要的改进是不仅有一个用于锁定和解锁的自旋循环,而且还有一个用于等待事件的自旋循环。在这种情况下,您不必锁定互斥体,而是在 wait_poll 函数上提供谓词,并且代码反复尝试锁定互斥体轮询,如果它可以锁定互斥体,则它会调用返回(或移动)一对的谓词bool 和结果类型。
即使调用立即返回,等待内核中的信号量和/或事件对象 (Win32) 也很容易花费 1.000 到 10.000 个时钟周期,因为之前已经设置了信号量或事件。因此,必须有一个与该等待间隔具有合理关系的旋转计数,其中旋转的时间是内核中所花费的最小间隔的十分之一。
通过我的监控对象,我从 glibc 中获取了自旋计数重新计算算法。我还使用暂停指令。但我发现在我的CPU(TR 3900X)上暂停指令太快了。平均约为 0.78ns。在 Intel-CPU 上,它更合理,约为 30 纳秒。
这是代码:
#include <iostream>
#include <chrono>
#include <cstddef>
#include <cstdint>
#include <immintrin.h>
using namespace std;
using namespace chrono;
int main( int argc, char **argv )
{
static uint64_t const PAUSE_ROUNDS = 1'000'000'000;
auto start = high_resolution_clock::now();
for( uint64_t i = PAUSE_ROUNDS; i; --i )
_mm_pause();
double ns = (int64_t)duration_cast<nanoseconds>( high_resolution_clock::now() - start ).count() / (double)PAUSE_ROUNDS;
cout << …Run Code Online (Sandbox Code Playgroud) 是否可以使用 C++20 重载带有概念的类?我刚刚尝试过这个,但它不起作用。
template<typename StringT>
requires requires( StringT t )
{
{ t } -> same_as<string>;
}
struct S
{
};
template<typename StringT>
requires requires( StringT t )
{
{ t } -> same_as<wstring>;
}
struct S
{
};
Run Code Online (Sandbox Code Playgroud) 是否可以包含astring或字符,以便以下代码打印 1 两次?string_view'\0'
或者这只是实现定义的?
#include <iostream>
#include <string_view>
#include <string>
using namespace std;
int main()
{
string_view sv( "\0hello world", 12 );
cout << (sv == sv) << endl;
string str( sv );
cout << (str == sv) << endl;
}
Run Code Online (Sandbox Code Playgroud)
这与字符串是否可以嵌入空值的问题并不重复,因为它们显然可以。我想问的是字符串或字符串视图的比较是否以 0 字符终止。
想象一下我有一个可调用的模板参数“Fn fn”。现在我想检查它的返回类型是否是有符号标量。我如何使用 C++20 概念做到这一点?
我只是想对 std::set<> 应用无穷大的加载因子,因为我想要有固定数量的存储桶。所以我使用了 1.0f / 0.0f 的负载因子,因为它比 numeric_limits<float>::infinity() 更短。MSVC 由于被零除而给出错误。clang-cl 和 clang++ 编译代码没有错误。那么哪个编译器是正确的呢?