[英]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.