18

私がやろうとしているのは、2^30 に等しい定数を定義することです (2^34 のようなものに変更する可能性があるため、32 ビットよりも大きな部屋を用意することを好みます)。

次の最小限の (?) 例がコンパイルされないのはなぜですか?

#include <stdint.h>
// test.cpp:4:33: error: expected primary-expression before numeric constant
// test.cpp:4:33: error: expected ')' before numeric constant
const uint64_t test = (uint64_t 1) << 30;
//const uint64_t test1 = (uint64_t(1)) << 30;// this one magically compiles! why?

int main() { return 0; }
4

3 に答える 3

6

(uint64_t 1)は有効な構文ではありません。キャストするときは、uint64_t(1)またはを使用できます(uint64_t) 1。コメントアウトされた例は、次のようにキャストの適切な構文に従っているため機能します。

const uint64_t test = ((uint64_t)1) << 30;

編集:これは質問に直接答えますが、特定のサイズの整数定数を適切に定義する方法については、Shafik Yaghmour による回答を参照してください。

于 2014-03-12T20:34:34.713 に答える