簡體   English   中英

'<<' 運算符如何與 C++ 中的 #define 一起使用

[英]How '<<' operator does work with #define in C++

我有兩個操作,我假設兩者都在做 ShiftLeft 按位操作。

#define TACH_MAX_OWN_ORDERS 1<<6
int myVal = 1<<6
cout<<"Value after operation|"<<myVal <<"|"<<TACH_MAX_OWN_ORDERS<<endl;

TACH_MAX_OWN_ORDERS值的 output 總是讓我感到驚訝。

Value after operation|64|16

有沒有人有任何線索,它是怎么來的??? 謝謝

宏按原樣替換文本,因此將導致

cout<<"Value after operation|"<<myVal <<"|"<<1<<6<<endl;

<<不會導致(int)1<<6而是([...] << 1) << 6其中[...]將在最深級別具有std::cout 這意味着您的宏在std::cout中使用時將始終導致 16 ,因為 1 和 6 被移入 out stream ( "1" + "6" ) 而不是實際數值64


您應該在語句周圍加上括號以避免這種情況:

#define TACH_MAX_OWN_ORDERS (1<<6)

甚至更好,因為你應該避免使用宏,如果可以的話,嘗試使用編譯時常量:

constexpr int TACH_MAX_OWN_ORDERS = 1 << 6;

暫無
暫無

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

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