使用可变参数(Args ...)记录的 CPP 问题

问题描述 投票:0回答:1

我正在尝试在我的 cpp 应用程序上记录一些内容。 我选择继续使用可变参数。

我的日志功能:

inline void log() {}

template<class... Args>
inline void log(std::string_view first, const Args&... args)
{
    std::cout << first << std::endl;
    log(args...);
}

为了测试,我正在尝试记录此消息:

for (int i = 0; i < 10; ++i) {
    log("I am a message to log ... ", "123456789" + i);
}

我有这个意想不到的结果(每条日志消息应该是相同的数字,不是吗?):

I am a message to log ...
123456789
I am a message to log ...
23456789
I am a message to log ...
3456789
I am a message to log ...
456789
I am a message to log ...
56789
I am a message to log ...
6789
I am a message to log ...
789
I am a message to log ...
89
I am a message to log ...
9
I am a message to log ...

我想我遗漏了一些东西,在我的代码中的某个地方...... 我试图在 2 个操作系统(windows 和 linux mint)上运行这段代码,只是为了确保 x)!

好吧,我被困在这个问题上...

任何想法?在此先感谢!!!

c++ logging variadic-functions
1个回答
0
投票

正如评论中提到的,您的代码片段表现符合预期。看,问题是你做

"123456789" + i
"123456789"
const char*
。所以添加
i
是指针运算,实际上你改变了你的数据的起始位置来打印。

也已经回答了,修复你正在寻找的是删除添加并使我成为日志功能的新参数。

© www.soinside.com 2019 - 2024. All rights reserved.