提问者:小点点

编译时C++字符串连接


我想写记录器,我需要关于源文件和行的数据。 这行代码在编译时是否工作:

constexpr std::string_view source = (std::string(__FILE__) + ":" + std::to_string(__LINE__));

如果它在编译时不起作用,我该怎么做呢? 也许这是不可能的?


共2个答案

匿名用户

这不需要分配,也不需要编译时间

#include <iostream>

#define STR_(X) #X
#define STR(X) STR_(X)

int main() 
{
    //constexpr std::string_view(const char*) doesn't work in some versions of gcc, but is a better alternative if the compiler supports it
    constexpr const char* str = __FILE__ ":" STR(__LINE__);
    std::cout << str << std::endl;
}

匿名用户

如果我答对了,线和文件都是Makros。 请执行以下操作:

#define STRING(s) #s
constexpr std::string_view source = STRING(__FILE__) + ":" + STRING(__LINE__);

它应该可以在编译时工作。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(编译|c++|字符串|连接)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?