小编the*_*ack的帖子

C ++ constexpr重载,用于编译时和运行时的不同代码

constexpr void X() {
  /* code, that can be executed at compiletime */
}

void X() {
  /* code, that does the same as above, but is optimized for runtime, eg.
  including caching, assembler code, ... to optimize runtime performance */
}
Run Code Online (Sandbox Code Playgroud)

如上所示,我想要两个函数,它们基本上都在做相同的事情,一个针对运行时进行了优化,一个针对编译时进行了优化。在我的示例中,运行时版本涉及缓存,这不能在constexpr中完成,但可以提高运行时的性能。

可以通过某种方式(使用C ++ 14)实现吗?

如果只能使用特定于编译器的解决方案来实现此目的,那么它们也可以,但是我更喜欢一种标准解决方案(当前,我不知道有一个解决方案)

c++ optimization constexpr c++14

5
推荐指数
0
解决办法
78
查看次数

函数指针的可变函数

有没有办法将可变参数函数强制转换为这样的函数指针,这是合法的吗?我要求C和C++,但由于这个结构存在于两种语言中,我将两个问题都放在一起.

extern int test(int, ...);
auto testptr = (int(*)(int, int, long)) &test;
Run Code Online (Sandbox Code Playgroud)

谢谢,杰克

c++ function variadic-functions

0
推荐指数
1
解决办法
104
查看次数

使用:: std :: vector进行数组创建

我想在运行时增长:: std :: vector,像这样:

::std::vector<int> i;
i.push_back(100);
i.push_back(10);
Run Code Online (Sandbox Code Playgroud)

在某些时候,向量已经完成,并且我不需要额外的功能:: std :: vector可以提供更多的功能,因此我想将其转换为C数组:

int* v = i.data();
Run Code Online (Sandbox Code Playgroud)

因为我将不止一次这样做,所以我想释放所有保留的堆内存:: std :: vector,但是我想保留数据,就像那样(伪代码):

free(/*everything from ::std::vector but the list*/);
Run Code Online (Sandbox Code Playgroud)

有人可以给我一些指导吗?

预先感谢,杰克

c++ arrays vector

0
推荐指数
2
解决办法
86
查看次数