我正在编写一个需要在运行时创建数组的函数。该数组将是小尺寸,因此我不担心不安全的代码,但是,我想编写“正确”的代码。因此,我正在考虑三种选择:
使用Compiler Explorer将它们与 -O3 进行比较。结果如下:
我是否错过了对 std::vector<> 的优化,或者“正确的”C++ 方式是否较慢,或者我完全错过了一种编码方式?
编辑:我忘了删除堆分配的数组
测试代码:
代码1:
#include <string.h>
void populate_array(char* arr);
int compute_result(char* arr);
int str_to_arr(const char* str)
{
auto len = strlen(str);
char array[len];
populate_array(array);
return compute_result(array);
}
Run Code Online (Sandbox Code Playgroud)
代码2:
#include <string.h>
void populate_array(char* arr);
int compute_result(char* arr);
int str_to_arr(const char* str)
{
auto len = strlen(str);
char* array = new char[len];
populate_array(array);
auto result = compute_result(array);
delete[] array;
return …Run Code Online (Sandbox Code Playgroud) 我是 git 的新手,并且在将 master 切换到 main 的更新之后创建了一个新的 github repo。
我遇到的第一个问题是,当我拉动时,git pull origin main什么也没有掉下来。当时,回购继续是 .gitignore、自述文件和许可证。我通过手动下载它们解决了这个问题。
但是,我无法推送到主要内容。当我尝试运行时,git push origin main我收到一条错误消息,并被 git 告知运行以下命令:git push --set-upstream origin master. 运行之后,我现在可以推送到 master 而不是 main。当我尝试运行时git push origin main,出现以下错误:
error: src refspec main does not match any
error: failed to push some refs to 'https://github.com/Ebony-Ayers/CS-style-text-format'
Run Code Online (Sandbox Code Playgroud)
根据github网站上的repo main是我的默认分支,我该如何做到这一点,以便我可以推送到main而不是master?任何帮助将不胜感激。
据我了解,您可以通过#define以下两种方式之一使用 C 预处理器:
#define SOME_VAL 3.4159f#define SOME_FLAG我正在编写一个库,我正在使用 #defines 来让用户解析设置以进行编译。我的问题是我需要知道使用了上述两种情况中的哪一种。
示例:
#define DISABLE_FEATURE或#define DISABLE_FEATURE false。
有没有办法让我区分这两者,还是必须在文档中指定要使用的?
我正在编写一个记录器,我希望记录器也记录调用它的行、函数和文件。我试过#define my_logger(format, ...) _log(format, __LINE__, __PRETTY_FUNCTION__, __FILE__, __VA_ARGS__)哪个有效,但这给我带来了几个问题(我不能轻易重载它,我不能把它放在命名空间中,而不是最便携的,等等)。
有没有一种方法可以声明一个正常的函数,比如void my_logger(const char* format, ...)在函数定义中它是否知道调用它的行,并使用与__LINE_FUNCTION_WAS_CALLED_FROM__此类宏是否存在等效的东西?至少它需要在 GCC 上工作并且真的应该是跨平台的。
编辑:通过跨平台,我只指 x86 和 ARM 上的 Linux 和 Windows
我有指针结构,其中指针是任意类型但在编译时已知。
struct ptrs
{
int* a;
const char** b;
int* c;
float* d;
};
Run Code Online (Sandbox Code Playgroud)
鉴于它们都是指针,它们的长度都相同。有没有办法可以访问带有类型信息的第 n 个元素。
我可以将结构转换为 void 指针数组,但随后我会失去我正在查看的类型的知识,同样使用联合。
整个代码库都在 c++20 中,所以我不需要担心 c 支持。
编辑:我想要这个用于以下用途。我将创建一个可变参数宏,将任意数量的输入转换为指向 then 的指针数组。这将传递给处理函数,该函数将根据命令字符串以任意顺序处理它们。例如“返回 $var1 + $var2”。处理需要随机访问元素一次或多次,因此“索引”一个结构。然而,为了支持算术,需要知道类型。