簡體   English   中英

我們可以在 cpp 中重命名 cout、endl 關鍵字嗎?

[英]Can we rename cout, endl keyword in cpp?

由於 typedef 可以更改類型的名稱,而 define 可以為值和函數創建別名,有沒有辦法更改 cout、endl 等的名稱?

我們可以在 cpp 中重命名 cout、endl 關鍵字嗎?

coutendl都不是 C++ 中的關鍵字。 它們是在標准庫的std命名空間中聲明的名稱。 前者是一個變量,后者是一個 function 模板。

您不能“重命名”變量或 function 模板,就像您可以重命名類型一樣,但是就像您可以為類型創建別名一樣,您基本上可以使用引用為變量實現相同的目的:

auto& some_name = std::cout;

對於 function 模板,一個選項是編寫一個包裝器 function 模板:

template<class CharT, class Traits>
auto&
endl_wrapper(std::basic_ostream<CharT, Traits>& os)
{
    return std::endl(os);
}

避免使用不必要的別名混淆程序。

有兩種方法可以做到這一點。 在 C++ 意義上,您可以使用std::ostream

#include <iostream>
std::ostream& alias = std::cout;

或者,以更好的方式,使用對auto的引用讓編譯器決定正確的類型。

auto& print = std::cout;

一些重要的注意事項:

  1. 您不能using語句創建std::coutstd::endl等的別名。

  2. 由於std::endl是模板 function 而不是類型,因此無法使用對自動類型的引用來推斷。


OTOH,您可以使用#define語句(類似C):

#include <iostream>
#define print std::cout <<
#define end   << std::endl
.
.
print "Hello world!" end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM