質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

1349閲覧

c++ nullを比較するoperatorを作りたい。if(c != null){}をやりたい

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/02/20 07:45

提示コードの **bool operator != (nullptr_t)**ですがもしnullじゃなかったらという処理はどうやって作ればいいのでしょうか? ちなみにoperatorです。

#include <iostream> #include "stdio.h" #include "conio.h" #include <optional> class c{ public: int x; int y; c(int xx,int yy) { x = xx; y = yy; } bool operator == (c& t) { if(x == t.x && y == t.y) { return true; }else { return false; } } /**/ bool operator != (nullptr_t) { if(this == nullptr_t)///// { } } }; int main() { c a(1,0),b(0,0); if(a == b) { printf("true"); }else { printf("false"); } int _ch = _getch(); return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/02/20 07:59

「if(c != null)」という判定がfalseとなることは想定されるのでしょうか?
退会済みユーザー

退会済みユーザー

2020/02/20 08:15

はい。そもそも構文エラーになるので困っています。どうすればポインタ変数 != nullといった条件を作成できるのでしょうか?
maisumakun

2020/02/20 08:18

ポインタであればそのまま書けます。 c* p = /* 初期化 */; if(p != null)
guest

回答2

0

c型のインスタンスに関して,どのような状態を,
「nullだ」とか「nullじゃない」という言い方(?)というか表現としたいのか,に合わせて判定を行えば良いのではないかと思います.

C++

1class c 2{ 3public: 4 c( int val ) : m_val(val) {} 5 6 //c型の状態に関して, 7 //何を持って「nullptrと等しい/等しくない」という話にしたいのか? 8 //というのに合わせて,oprator==()の中身に適切な判定を書けばよいと思う. 9 // この例では,m_valの値が100であるときに「nullptrと等しい」と判定される 10 bool operator==(nullptr_t) const { return m_val == 100; } 11 bool operator!=(nullptr_t) const { return !operator==(nullptr); } 12 13private: 14 int m_val; 15};

ただ,このオペレータを使う側のコード(インスタンスとnullptrを比較するという記述)が,たいそう不自然な雰囲気を放つ気がするので…

C++

1c inst(100); 2if( inst == nullptr ) //この記述見たら「!?」ってなる 3{ 4 std::cout << "おキャット様\n"; 5}

個人的には,(やりたいこと次第でしょうけども) operator bool()とかの方がまだ良いのではなかろうか,とか思います.

投稿2020/02/20 09:06

編集2020/02/20 09:17
fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yumetodo

2020/02/20 09:59

横道それますがoperator boolよりはecplicit operator boolに・・・
fana

2020/02/20 12:10

explicitをコンストラクタでないものに対して書く/書かない の差がわかっていない私であります.
guest

0

こんにちは。

if(this == nullptr)で良いです。「nullptrnullptr_t型」です。「0int型です」と同じ表現です。

投稿2020/02/20 08:29

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2020/02/20 09:11

//実質意味がない判定であるような…? if( this == nullptr ){ ここにくる記述って書けるのだろうか? }
Chironian

2020/02/20 10:14

あ、その通りですね。
katsuko

2020/02/20 12:47

一応、「C *c=nullptr; *c != nullptr;」で呼び出せますね。いいか悪いかは知りませんが。
yohhoy

2020/02/21 07:24 編集

C++言語では、this は絶対にヌルポインタにはなりません。 つまり条件式 this == nullptr は常に false と判定され、コンパイラの最適化により if-then分岐側のコードは丸ごと削除される可能性があります。 (GCCとLLVM/Clangは実際にこのような最適化を行います) > C *c=nullptr; *c != nullptr; このコードは未定の義動作となります。プログラムがどように実行されるかは予測できません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問