从方法调用时,C++ endl 不打印新行
C++ endl not printing new line when called from a method
C++ 新手
我的理解是 endl 将添加一个新行。因此,使用以下代码:
#include <iostream>
using namespace std;
void printf(string message);
int main()
{
cout << "Hello" << endl;
cout << "World" << endl;
printf("Hello");
printf("World");
return 0;
}
void printf(string message) {
cout << message << endl;
}
我希望输出为:
你好
世界
你好
世界
但是,奇怪的是,输出是:
你好
世界
你好世界
看起来,当从用户定义的方法调用时,endl 没有添加新行..??
我在这里的理解有什么问题。请指教
它正在使用内置的 printf 方法。
尝试显式使用 std::string 以便它调用自定义 printf 方法。
printf(std::string("Hello"));
printf(std::string("World"));
或者您可以将您的方法放在不同的命名空间中:
#include <iostream>
namespace test
{
extern void printf(const std::string& message);
}
int main()
{
std::cout << "Hello" << std::endl;
std::cout << "World" << std::endl;
test::printf("Hello");
test::printf("World");
return 0;
}
void test::printf(const std::string& message) {
std::cout << message << std::endl;
}
您应该选择 printf();
以外的函数名称,例如 Print()
.
问题是由于过载分辨率选择了内置printf
函数而不是您自定义的printf
函数。这是因为 字符串文字 "Hello"
和 "World"
衰减 到 const char*
由于 type decay 和内置的 printf
函数比您自定义的 printf
.
更匹配
要解决这个问题,请将 printf
调用替换为:
printf(std::string("Hello"));
printf(std::string("World"));
在上面的语句中,我们显式地使用 std::string
的构造函数从 字符串文字 "Hello"
创建 std::string
对象和 "World"
然后按值将这些 std::string
对象传递给您的 printf
函数。
另一种选择是将自定义 printf
放入自定义命名空间中。或者你可以命名你的函数而不是 printf
本身。
尝试将“printf”函数重命名为“print”它工作正常-
#include <iostream>
using namespace std;
void print(string message);
int main()
{
cout << "Hello" << endl;
cout << "World" << endl;
print("Hello");
print("World");
cout <<endl;
return 0;
}
void print(std::string message) {
cout << message << endl;
}
C++ 新手 我的理解是 endl 将添加一个新行。因此,使用以下代码:
#include <iostream>
using namespace std;
void printf(string message);
int main()
{
cout << "Hello" << endl;
cout << "World" << endl;
printf("Hello");
printf("World");
return 0;
}
void printf(string message) {
cout << message << endl;
}
我希望输出为:
你好
世界
你好
世界
但是,奇怪的是,输出是:
你好
世界
你好世界
看起来,当从用户定义的方法调用时,endl 没有添加新行..?? 我在这里的理解有什么问题。请指教
它正在使用内置的 printf 方法。 尝试显式使用 std::string 以便它调用自定义 printf 方法。
printf(std::string("Hello"));
printf(std::string("World"));
或者您可以将您的方法放在不同的命名空间中:
#include <iostream>
namespace test
{
extern void printf(const std::string& message);
}
int main()
{
std::cout << "Hello" << std::endl;
std::cout << "World" << std::endl;
test::printf("Hello");
test::printf("World");
return 0;
}
void test::printf(const std::string& message) {
std::cout << message << std::endl;
}
您应该选择 printf();
以外的函数名称,例如 Print()
.
问题是由于过载分辨率选择了内置printf
函数而不是您自定义的printf
函数。这是因为 字符串文字 "Hello"
和 "World"
衰减 到 const char*
由于 type decay 和内置的 printf
函数比您自定义的 printf
.
要解决这个问题,请将 printf
调用替换为:
printf(std::string("Hello"));
printf(std::string("World"));
在上面的语句中,我们显式地使用 std::string
的构造函数从 字符串文字 "Hello"
创建 std::string
对象和 "World"
然后按值将这些 std::string
对象传递给您的 printf
函数。
另一种选择是将自定义 printf
放入自定义命名空间中。或者你可以命名你的函数而不是 printf
本身。
尝试将“printf”函数重命名为“print”它工作正常-
#include <iostream>
using namespace std;
void print(string message);
int main()
{
cout << "Hello" << endl;
cout << "World" << endl;
print("Hello");
print("World");
cout <<endl;
return 0;
}
void print(std::string message) {
cout << message << endl;
}