這些代碼編譯沒有錯誤,但time
宣告無處。在iostream或C++的其他地方有什麼叫做時間嗎?
幸運的是,由於我將名稱更改爲mtime,錯誤消失了。但是錯誤的本質是什麼?什麼是time
?
該程序的輸出爲1
。我想知道文件iostream
或其他地方是否有所謂的time
。
#include <iostream>
int main()
{
std::cout << time << std::endl;
return 0;
}
這些代碼編譯沒有錯誤,但time
宣告無處。在iostream或C++的其他地方有什麼叫做時間嗎?
幸運的是,由於我將名稱更改爲mtime,錯誤消失了。但是錯誤的本質是什麼?什麼是time
?
該程序的輸出爲1
。我想知道文件iostream
或其他地方是否有所謂的time
。
#include <iostream>
int main()
{
std::cout << time << std::endl;
return 0;
}
這是一個time_t time(time_t*)
功能爲您的<iostream>
實施地址包括time.h
頭。地址will never be NULL並且可以隱式轉換爲布爾值,因此1
的結果。你可能在Linux上使用g ++。
我懷疑是在於它的time_t time(time*)
功能,其operator<<
最佳匹配是一個採取bool
(函數指針僅僅是一個隱式轉換遠離bool
)。現在,假設它是一個指向實際有效函數的函數指針,它將轉換爲true
,然後打印爲1
(如果boolalpha
標誌未設置,則默認打印布爾值爲0/1)。
C++標準庫函數在命名空間std
中定義。例如,<ctime>
頭部需要提供std::time
功能。但實際上,這個功能由底層C庫提供,沒有名稱空間的概念。因此,C++標準庫頭允許在全局名稱空間中定義某些函數。
從C compatibility headers部分引述在cppreference:
包括
<cstdlib>
絕對提供std::malloc
並且還可以提供:: malloc的。其中<stdlib.h>
明確提供::malloc
,也可能提供std::malloc
。
因此,例如,time
函數可能碰巧在包含標準庫頭後在全局名稱空間中定義。這是標準允許的,但是是特定於實現的。
我發現了一個問題Why does iostream include time.h?驗證上述答案並解釋函數出現的原因。 它真的是功能的工作time_t time(time_t * timer)
:)
可能是['std :: time'](http://en.cppreference。com/w/cpp/chrono/c/time)函數,或者更確切地說是C等價的['time'](http://en.cppreference.com/w/c/chrono/time)。指向函數的指針將被視爲始終爲真的布爾值,而'true'將不會將操縱符或'std :: cout'中的設置標誌打印爲'1'。 –
什麼是你的平臺,你的編譯器是什麼? –