例えば、あるクラス(TestClass)の静的メンバ変数(member)の値を返すgetter関数を呼び出す際に
「TestClass::getMember()」のように括弧ありで呼び出すと、正常にメンバ変数の値が返りますが
「TestClass::getMember」のように括弧なしで呼び出すと、異常な値(「001513BB」などの16進数(?)のような値)が返ります。
括弧なしで呼び出したとしても、返った値を変数に代入したり、別の値と比較したりする場合は
型の不一致でエラーになるので気付くことができます。
しかし、返った値を0と比較する場合など、エラーにならない場合もあります。
(下記コード参照)
このような場合だと、括弧の付け忘れに気付かず、バグの原因になってしまうので
どんな場合でも、括弧なしで関数を呼び出した場合はコンパイルエラーにしたいです。
VisualStudioを使っているので、設定でエラーにできないか確認しましたが、そのような設定は見当たりませんでした。
設定でエラーにできない場合、括弧の付け忘れを防止できるようなコードの書き方があれば、ご教授願います。
よろしくお願い致します。
また、括弧なしの関数の呼び出しは、どのような場合に使用するのでしょうか?
こちらも併せてご回答いただけると幸いです。
開発環境は以下の通りです。
OS:Windows7(64bit) Home Premium SP1
統合開発環境:Visual Studio Community 2017
コンパイラ:Visual C++ 2017
ライブラリ:DXライブラリVer3.18a
#include "stdafx.h"
#include <iostream>
/**
* テスト用クラス
*/
class TestClass
{
private:
static int member; // メンバ変数
public:
static int getMember(void); // メンバ変数ゲッター
};
int TestClass::member = 0;
/**
* メンバ変数ゲッター
*
* @return member メンバ変数
*/
int TestClass::getMember(void) {
return member;
}
int main(int argc, char *argv[]) {
// 括弧あり = 正常な値(0)
std::cout << "getMember() = " << TestClass::getMember() << "\n";
// 括弧なし = 異常な値(001513BBなど)
std::cout << "getMember = " << TestClass::getMember << "\n";
// 括弧なしの場合、メンバ変数は0なのに、0と比較しても真にならない
// また、コンパイルエラーにならない
if (0 == TestClass::getMember) {
std::cout << "TRUE";
}
getchar(); // 入力待ち
return 0;
}