我是學生,學習C++併發編程。我想知道如何通過我的C++程序訪問功能圖形卡芯片和聲卡芯片。是否有另一種方式來連接各自的驅動程序和我的應用程序,而無需使用外部庫,如OpenGL,OpenAL等。您可以通過示例簡要描述解決方案。 謝謝。如何直接從C++訪問GPU和SoundCard芯片的功能?
回答
const int * const function_name(const int * point) const;
//(1) (2) (3) (4)
第一個防止返回的指針被用來修改函數正在訪問的任何數據。這很好(除非你想修改它),因爲它可以防止共享數據的意外修改。
第二個阻止調用者修改返回的指針。這在返回內置類型(如指針)時不起作用,並且在返回類類型時可能很糟糕,因爲它禁止移動語義。
第三個阻止函數修改數據。由於與第一個相同的原因,這是很好的(適當的時候)。
第四種防止函數修改對象的(不可變)狀態。這是很好的(適當時),因爲它允許在const
對象上調用該函數,並且使得更容易跟蹤對象何時可能改變。
const int * const Functiontwo(const int * const &) const;
// (5)
這裏唯一的新東西是通過const
參考傳遞指針。這樣做沒有意義;按值傳遞給出了相同的語義,並且不那麼冗長,可能更有效。通過const
參考可以比通過價值傳遞更大的類型是大型或昂貴的複製。
細微變化是通過一個const
值:
const int * const Functiontwo(const int * const) const;
// (6)
這是不感興趣的呼叫者(實際上,該功能可以在有或沒有它被聲明不改變的含義);所以沒有必要把它放在聲明上,就在的定義上。這意味着指針在函數內不能改變。這可能是好的(正如可以聲明局部變量const
),因爲它可以使函數實現更容易遵循。
非常感謝// bro非常。 –
最後一個例子:因爲這實際上是一個函數*聲明*,所以參數的最高級別const根本沒有意義。函數* definition *可以保留或添加頂級const,因爲它認爲合適。 –
@ArneMertz:確實;我已經更新,更明確地說,在聲明中放置頂級'const'沒有意義。 –
const
一個成員函數之後意味着該函數不修改父對象的狀態:
struct foo
{
int bar() const; // does not modify the instance of foo
int & bar(); // might modify the instance of foo
};
在您的例子的函數返回
int const * const
第一const
裝置,該你指出的int
一定不能改變;你告訴你的用戶他可能會讀取這個值,但不能修改它。這也是相關const
-correctness:
int const * foo() const; // can be used from const functions
int * foo(); // cannot be used from const function
第二const
意味着指針本身是const
,即:
int * ptr = &a;
*ptr = 42; // valid
ptr = &b; // valid
int const * ptr = &a;
*ptr = 42; // INVALID
ptr = &b; // valid
int * ptr const = &a;
*ptr = 42; // valid
ptr = &b; // INVALID
int const * ptr const = &a;
*ptr = 42; // INVALID
ptr = &b; // INVALID
使得指針本身const
作爲返回值從函數幾乎非常有用。
對於參考文獻,C++ 03的快速指南是如果您想要修改對象並希望修改保持不變,您希望通過引用傳遞;如果要修改對象但不想修改爲粘貼(複製),或者(例外!),如果您傳遞的值是POD類型,則按值傳遞值;您通過恆定的參考,如果你不需要修改非POD類型,從而節省自己的拷貝費用:
void foo(int & a); // changes to a are applied to a itself, no copy made
void foo(int a); // changes to a are applied to a copy of a, copy made
void foo(std::string const & a); // no changes allowed, no copy made
- 1. 從直接訪問Wordpress訪問功能
- 2. 如何從powershell訪問芯片卡?
- 3. GPU芯片組檢測
- 4. Boost Locale - 直接訪問ICU功能
- 5. 如何使用CodeIgniter的「錨定」功能直接訪問www.whatever.com?
- 6. 直接從功能
- 7. 如何直接訪問timeit魔術功能
- 8. OpenCL,直接從GPU內核訪問主機內存
- 9. 訪問Materialise的芯片響應
- 10. 如何將ARM芯片與外部存儲器芯片連接?
- 11. 從功能訪問片段的活動與功能
- 12. 如何直接從VS2008訪問.NET Reflector
- 13. 如何從Mongoid直接訪問MongoDB API?
- 14. 如何直接從android sdk訪問DroidSans.ttf?
- 15. 通過RFID芯片訪問Facebook
- 16. C++直接訪問導線
- 17. PowerVR和Mali GPU芯片組的opengl編程差異
- 18. 圖片不能垂直居中儘管使用表和表芯
- 19. 從瀏覽器(JS)訪問C#功能
- 20. NodeJS Express app.locals不能直接訪問功能
- 21. 直接從Android訪問MySQL
- 22. 直接從SPListItemCollection訪問SPListItem
- 23. 如何從另一個功能訪問道具中的功能
- 24. 如何直接訪問文件夾和訪問Excel文件
- 25. 直接訪問iPad照片庫
- 26. OpenUI5綁定屬性的功能,而不是直接訪問
- 27. 如何從另一個類訪問類和它的功能
- 28. 從C#訪問iPad圖片#
- 29. 連接Arduino獨立芯片和XBee
- 30. 如何獲得角材料芯片的選定芯片?
我通過這個網站消失了: http://duramecho.com/ComputerInformation/WhyHowCppConst .html 但無法掌握我想要的確切想法。需要更好地解釋如何將這些「const」關鍵字適當地放在每個地方,以及它如何影響程序效率。 –
我對自己有一個簡單的規則:當有些東西我不需要改變,那麼我使用'const'。 –
也許你應該說*你認爲這個詞的意思,然後在上面的每個用法中意味着什麼。畢竟,你只是通過一個教程。你從中學到了什麼? – WhozCraig