这就是我要做的事情:
showMessage("ERROR: THE MAX IS:" + max);
基本上我想将一个变量(在本例中为int)与一个字符串连接起来,将其作为参数传递。
如何在C ++中执行此操作?
答案 0 :(得分:4)
这是一种方式:
std::ostringstream msg;
msg << "ERROR: THE MAX IS: " << max;
showMessage(msg.str());
答案 1 :(得分:1)
std::string
和std::to_string()
的组合给出了C ++ 11的优点:
#include <iostream>
#include <string>
using namespace std;
int main() {
int max = 42;
std::string mess("ERROR: THE MAX IS: ");
mess += std::to_string(max);
std::cout << mess;
}
如果要将字符串用作接受const char*
的函数的参数,可以使用std::string::c_str()
来获取std::string
的C样式字符串:
func(mess.c_str());
答案 2 :(得分:1)
就个人而言,如果您要沿着那条路线展示某些东西,则无需让用户做额外的工作:
#include <iostream>
template<typename T>
void showMessage(T &&t) {
std::cout << t << "\n";
}
template<typename Head, typename... Tail>
void showMessage(Head &&head, Tail&&... tail) {
std::cout << head;
showMessage(std::forward<Tail>(tail)...);
}
int main() {
showMessage("value1: ", 5, " and value2: ", 'a');
}
这是一个live example。任何流都应该工作,包括字符串流和文件流。请记住,这与仅使用流非常相似,只有在您显示其他内容时才真正值得。
答案 3 :(得分:0)
没有库存C ++方法可以做到这一点,字符串文字就是这样,而且它们通常是不变的。你需要使用重载的字符串类,或者你需要让showMessage接受参数并为你做一些格式化。
// simple version - take a single string.
void showMessage(const std::string& message) {
// your old code, e.g. MessageBoxA(NULL, message.c_str(), "Message", MB_OK);
}
// complex version, take lots of strings.
void showMessage(std::initializer_list<std::string> args) {
std::string message = "";
for (auto str : args)
message += str;
showMessage(message);
}
int main(int argc, const char* argv[]) {
showMessage("Simple version");
showMessage({ "This program is: ", argv[0], ". Argument count is: ", std::to_string(argc) });
return 0;
}