我意识到这不是最有效的做法,但是大多数C++可以接受创建临时的std::string
对象进行连接吗,就像第4行这样?
constexpr const char* const a = "This is ";
constexpr const char* const b = "a test.";
std::string s2 = std::string(a) + std::string(b);
std::cout << "*** " << s2 << std::endl;
我必须在许多地方更新一些代码,以前使用std::string
串联,现在使用这些constexpr
字符串常量,似乎更容易只是下降到一些std::string(...)
构造函数来快速更新代码。
正如我列出的那样,这在Visual C中是有效的,而且似乎是在支持C14的gcc版本中编译的(还需要测试)。
1条答案
按热度按时间a64a0gku1#
这是一个有效的解决方案,但效率低,而且有点不吸引人。注意,将第一个操作数强制转换为
std::string
就足够了。这稍微更有效率。从C++20开始
std::format()
是最好的方法。如果您坚持使用较旧的标准,则可以使用fmt库中的
fmt::format()
替换它。从C++17开始应该使用
std::string_view
而不是c-string-literal。从C++23开始您应该使用
std::print()
(或std::println()
)而不是std::cout
。它确保您的输出以正确的编码打印。尤其是在Windows CMD中,一旦您偏离ASCII,std::cout
就会产生问题。std::print
总是正确工作。