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

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

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

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

Q&A

解決済

2回答

2358閲覧

isとは何を示しているか

Y.R.T

総合スコア42

C++

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

0グッド

0クリップ

投稿2020/08/14 07:58

下記構文は、手入力でIPv4を入れて出力するのですが。
構文内にある『is』とはなにを示していますか?

is >> b1 >> d1 >> b2 >> d2 >> b3 >> d3 >> b4;
は、なにをしていますか?

また、
constexpr unsigned long to_ulong() const noexcept
は必要ですか?

#include <iostream> #include <array> #include <sstream> #include <assert.h> class ipv4 { std::array<unsigned char, 4> data; public: constexpr ipv4() :data{ {0} } {} constexpr ipv4(unsigned char const a, unsigned char const b, unsigned char const c, unsigned char const d) : data{ {a,b,c,d} } {} explicit constexpr ipv4(unsigned long a) : data{ { static_cast<unsigned char>((a >> 24) & 0xFF), static_cast<unsigned char>((a >> 16) & 0xFF), static_cast<unsigned char>((a >> 8) & 0xFF), static_cast<unsigned char>(a & 0xFF) } } {} ipv4(ipv4 const& other) noexcept : data(other.data) {} ipv4& operator=(ipv4 const& other) noexcept { data = other.data; return *this; } std::string to_string() const { std::stringstream sstr; sstr << *this; return sstr.str(); } constexpr unsigned long to_ulong() const noexcept { return (static_cast<unsigned long>(data[0]) << 24) | (static_cast<unsigned long>(data[1]) << 16) | (static_cast<unsigned long>(data[2]) << 8) | static_cast<unsigned long>(data[3]); } friend std::ostream& operator<<(std::ostream& os, const ipv4& a) { os << static_cast<int>(a.data[0]) << '.' << static_cast<int>(a.data[1]) << '.' << static_cast<int>(a.data[2]) << '.' << static_cast<int>(a.data[3]); return os; } friend std::istream& operator>>(std::istream& is, ipv4& a) { char d1, d2, d3; int b1, b2, b3, b4; is >> b1 >> d1 >> b2 >> d2 >> b3 >> d3 >> b4; if (d1 == '.' && d2 == '.' && d3 == '.') a = ipv4(b1, b2, b3, b4); else is.setstate(std::ios_base::failbit); return is; } }; int main() { ipv4 a(168, 192, 0, 1); std::cout << a << std::endl; std::cout << a.to_string() << std::endl; ipv4 b = a; ipv4 c; c = b; ipv4 ip; std::cout << ip << std::endl; std::cin >> ip; if (!std::cin.fail()) std::cout << ip << std::endl; }

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

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

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

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

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

cateye

2020/08/14 08:10 編集

IPアドレスを、組み立てているようですが、std::istream(std::cin)ではないですか?
Y.R.T

2020/08/14 08:38

ありがとうございます。
guest

回答2

0

ベストアンサー

>構文内にある『is』とはなにを示していますか?

std::istream型の変数だと思います。(istreamを略してisとしている)

>is >> b1 >> d1 >> b2 >> d2 >> b3 >> d3 >> b4;
>は、なにをしていますか?

istreamから、7個の値を順に、b1, d1,,,, b4に読み込んでいると思います。
>if (d1 == '.' && d2 == '.' && d3 == '.')
とあるので、ドットが3個入ってくることを期待しているようです。

>constexpr unsigned long to_ulong() const noexcept
>は必要ですか?
このコードの中ではto_ulongは呼び出されていませんので、
必須ではないですね。

投稿2020/08/14 08:43

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Y.R.T

2020/08/14 08:46

ありがとうございます。
guest

0

is >> b1 >> d1 >> b2 >> d2 >> b3 >> d3 >> b4;
その少し上に書かれています。
std::istream& is
なので、istream、入力ストリームかと思います。

オペレーターのオーバーロードなので、入力ストリーム >> ipv4 と書かれた時の動作を定義しています。

実際に呼び出しているのは、std::cin >> ip;の部分なので、
isの実体は、std::cin になるかと思います。

投稿2020/08/14 08:21

amiya

総合スコア1218

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

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

Y.R.T

2020/08/14 08:42

ありがとうございます。 理解できました。 to_ulong()が宣言されていますが、これは必要ですか? どこにも使われていないようですが。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問