许多C++书籍都包含这样的示例代码......
std::cout << "Test line" << std::endl;
Run Code Online (Sandbox Code Playgroud)
......所以我也一直这样做.但我已经看到很多来自像这样的开发人员的代码:
std::cout << "Test line\n";
Run Code Online (Sandbox Code Playgroud)
是否有技术上的理由偏爱另一个,或者仅仅是编码风格的问题?
考虑以下代码:
#include <cctype>
#include <functional>
#include <iostream>
int main()
{
std::invoke(std::boolalpha, std::cout); // #1
using ctype_func = int(*)(int);
char c = std::invoke(static_cast<ctype_func>(std::tolower), 'A'); // #2
std::cout << c << "\n";
}
Run Code Online (Sandbox Code Playgroud)
在此,对的两个调用std::invoke已标记为将来参考。预期的输出是:
a
Run Code Online (Sandbox Code Playgroud)
在C ++ 20中可以保证预期的输出吗?
(注意:有两个函数tolower,一个称为in <cctype>,另一个称为in <locale>。引入了显式强制转换以选择所需的重载。)
c++ c++-standard-library language-lawyer unspecified-behavior c++20