我正在尝试在我的 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)!
好吧,我被困在这个问题上...
任何想法?在此先感谢!!!
正如评论中提到的,您的代码片段表现符合预期。看,问题是你做
"123456789" + i
。 "123456789"
是const char*
。所以添加i
是指针运算,实际上你改变了你的数据的起始位置来打印。
也已经回答了,修复你正在寻找的是删除添加并使我成为日志功能的新参数。