在此代码中,您将看到它要求输入密码。请注意,没有真正的密码系统设置。我是C ++的新手,而我实际上只是了解字符串。我了解它们,但效果不佳。它是操作后备词吗?我不完全了解字符串,所以不了解发生了什么。我尝试使用Google搜索,但找不到任何内容。
当我用密码翻转用户名时,它可以正常工作。那么为什么要运行后备词呢?
#include <iostream>
#include <string>
std::string password()
{
std::cout << "Please enter your password. : ";
std::string password;
std::getline(std::cin, password);
return password;
}
std::string username()
{
std::cout << "Please enter your username. : ";
std::string username;
std::getline(std::cin, username);
return username;
}
int main()
{
std::cout << "Welcome to the test login! Please enter your username and password to enter. \n \n \n";
std::cout << username() << password() << "\n \n \n";
int noEnd{ 0 };
std::cin >> noEnd;
return 0;
}
请注意,如果我将密码与用户名交换了,则会起作用。
std::cout << "Welcome to the test login! Please enter your username and password to enter. \n \n \n";
std::cout << password() << username() << "\n \n \n";
但这对我来说没有意义。我了解C ++,并且刚刚学习了字符串的基础知识。从理论上讲,如果我有类似的代码,
std::cout << "Welcome to the test login! Please enter your username and password to enter. \n \n \n";
std::cout << username() << password() << "\n \n \n";
username()应该放在第一位,但是password()代替吗?
对不起,我知道请不要使用像奇怪的函数之类的东西,因为我可能不会理解它们。 。 。
答案 0 :(得分:0)
您的编译器正在从右到左评估std::cout << password() << username() << "\n \n \n"
。
几乎所有C ++运算符的操作数求值顺序 (包括对函数参数的求值顺序 函数调用表达式和求值顺序 未指定任何表达式中的子表达式)。编译器可以 以任何顺序评估操作数,并且当 再次计算相同的表达式。
最好的选择是以不依赖于评估顺序的方式编写代码。
std::string u = username();
std::string p = password();
std::cout << u << p << "\n \n \n";