2016-08-24 9 views
0

私は高速なランダムジェネレータを実装したい、と私は、このサイトに出くわした:https://en.wikipedia.org/wiki/Xorshift、ここでのconstは任意の使用を持っていると私は安全に取り外すことができた場合、次のコードC++ const use。私はそれを削除することはできますか?

#include <stdint.h> 

/* The state must be seeded so that it is not everywhere zero. */ 
uint64_t s[2]; 

uint64_t xorshift128plus(void) { 
    uint64_t x = s[0]; 
    uint64_t const y = s[1]; 
    s[0] = y; 
    x ^= x << 23; // a 
    s[1] = x^y^(x >> 17)^(y >> 26); // b, c 
    return s[1] + y; 
} 

を提案している場合、私は不思議でしたか?

+3

これはCです。「C/C++」という語句を信頼しないでください。 – Ohashi

+0

はい、あなたはどうしてあなたができなかったと思いますか?なぜそれを削除したいのですか? –

答えて

5

ここでconstは、yが誤って変更されるのを防ぎます。たとえば、プログラマが第4の文のxを誤ってyy ^= x << 23)とミスヒットした場合、コンパイラは不平を言います。

プログラムに意味的な影響を与えずに削除することはできますが、その理由はわかりません。

+0

私はこれをC#に移していますが、constはより厳密に使用されています。私はちょうどそれを見て、私は何かが欠けていたかどうか疑問に思った。ありがとう – Yann

0

constは削除できますが、これを行わないでください。

実際には、constの変数には変数を変更できないと記載されています。変更しようとすると、コンパイルできません。変数の変更によってプログラムの論理エラーが発生する場合は、変数constを使用して変数の変更を防止します。

関連する問題