可变参数函数将const char *视为char const(&)[len]

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

以下代码两次生成函数log

#include <iostream>

template<typename... Args>
void log(Args && ...args) {
    (std::cout << ... << args);
    (std::cout << std::endl);
}

int main() {
    log("Testing ", " my ", "log");
    log("log ", " appears ", " twice :(");
    return 0;
}

[C0的输出:

nm

是否有一种方法可以使$ nm -a test | grep log | c++filt 0000000100001160 T void log<char const (&) [5], char const (&) [10], char const (&) [10]>(char const (&) [5], char const (&) [10], char const (&) [10]) 0000000100001100 T void log<char const (&) [9], char const (&) [5], char const (&) [4]>(char const (&) [9], char const (&) [5], char const (&) [4]) 像对待log一样对待字符串,或者以其他任何不会导致每次调用都以二进制形式生成字符串的类型?当涉及到一个不匹配的小函数时,这没什么大不了的,但是显然,当从日志记录模块需要更多功能时,它变得更重了,我不希望为每个日志调用都生成该函数。 。

c++ optimization clang++
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.