2017-10-06 54 views
3

這些代碼編譯沒有錯誤,但time宣告無處。在iostream或C++的其他地方有什麼叫做時間嗎?

幸運的是,由於我將名稱更改爲mtime,錯誤消失了。但是錯誤的本質是什麼?什麼是time

該程序的輸出爲1。我想知道文件iostream或其他地方是否有所謂的time

#include <iostream> 
int main() 
{ 
    std::cout << time << std::endl; 
    return 0; 
} 
+2

可能是['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'。 –

+0

什麼是你的平臺,你的編譯器是什麼? –

回答

6

這是一個time_t time(time_t*)功能爲您的<iostream>實施地址包括time.h頭。地址will never be NULL並且可以隱式轉換爲布爾值,因此1的結果。你可能在Linux上使用g ++。

2

我懷疑是在於它的time_t time(time*)功能,其operator<<最佳匹配是一個採取bool(函數指針僅僅是一個隱式轉換遠離bool)。現在,假設它是一個指向實際有效函數的函數指針,它將轉換爲true,然後打印爲1(如果boolalpha標誌未設置,則默認打印布爾值爲0/1)。

0

std::time,但不應該是這種情況,因爲std不是使用的命名空間。

所以,它必須是此function

time_t的時間(time_t的*定時器);

它必須被iostream頭默認包含。

0

C++標準庫函數在命名空間std中定義。例如,<ctime>頭部需要提供std::time功能。但實際上,這個功能由底層C庫提供,沒有名稱空間的概念。因此,C++標準庫頭允許在全局名稱空間中定義某些函數。

C compatibility headers部分引述在cppreference:

包括<cstdlib>絕對提供std::malloc並且還可以提供:: malloc的。其中<stdlib.h>明確提供::malloc,也可能提供std::malloc

因此,例如,time函數可能碰巧在包含標準庫頭後在全局名稱空間中定義。這是標準允許的,但是是特定於實現的。

0

我發現了一個問題Why does iostream include time.h?驗證上述答案並解釋函數出現的原因。 它真的是功能的工作time_t time(time_t * timer) :)

相關問題