从方法调用时,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;
}