[英]g++ does not show a 'unused' warning
我在C ++中有一些代碼:
#include <iostream>
#include <iterator>
#include <string>
using namespace std;
int main() {
int i=0;
istream_iterator<string> EOS;
double x;
return 0;
}
現在我用我的g ++(GCC)4.4.4編譯它
g++ -W -Wall -pedantic test.cc -o test
得到:
test.cc: In function 'int main()':
test.cc:9: warning: unused variable 'i'
test.cc:11: warning: unused variable 'x'
為什么沒有警告未使用的EOS?
它不是原始值,因此其構造函數和/或析構函數可能具有所需的副作用。
為了說明這種情況在實踐中的發生:我使用一個類來對代碼段進行計時,大致如下所示:
class Timed {
double start;
public:
Timed() { start = now(); }
~Timed() { std::cout << (now() - start) << '\n'; }
}
因此,要衡量一個函數需要多長時間,我只需執行以下操作:
void slow() {
Timed t;
// heavy operation here...
}
變量t
永遠不會被使用,但是它對於代碼的行為仍然很重要。
istream_iterator<string>
具有構造函數,因此EOS
的聲明並非像i
和x
的聲明那樣真正地無操作。
通常,您想聲明一個類類型的對象,然后對其不執行任何操作。 例如,考慮C ++ 0x中的std::lock_guard
(Boost中的boost::scoped_lock
)或任何其他種類的范圍保護類。 您通常不需要對這種對象做任何事情,只想創建一個對象,以便其析構函數在塊的末尾運行以執行需要執行的任何清理操作。
因為您可以有目的地做到這一點。 這不是原始的。 也許構造函數和析構函數做一些重要的事情?
MFC甚至具有以這種方式操作的類,您可以這樣做:
void foo()
{
CWaitCursor cursor;
[...]
}
這將在功能持續時間內顯示一個沙漏圖標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.