以下程序将默默调用memcpy
:
struct Test
{
int d[100000]; // This needs to be here.
};
int main()
{
Test test[3] {Test(), Test(), Test()};
// Memcpy called for each element in initializer
static const Test test2[3] {test[0], test[1], test[2]};
}
使用extern "C"
可以更改链接器找到的函数来调用您自己的memcpy
:
#include <stdint.h>
#include <stddef.h>
extern "C"
void* memcpy(void* dest, const void* src, size_t len)
{
std::cout << "Custom memcpy called.";
return dest;
}
这很糟糕。该程序现在在应该使用stnadard库memcpy
的位置静默使用此版本的memcpy
。难道C ++编译器不应该使用具有C ++链接的函数来避免这种问题吗?