LoginSignup
1
0

More than 5 years have passed since last update.

はじめてのC++ 【35日目】

Posted at

はじめに

花粉か黄砂かしらないけどくしゃみめっちゃでてくる。

キャスト

(int)c;
int(c);

先日の投稿の内容が間違っていたのでもう一度調べてみる。

試した.cpp
#include <iostream>

int main(){
  double a = 5.5;
  double b = 5.5;
  double c = 5.5;

  std::cout << (int)a  << std::endl;//出力結果 5
  std::cout << int(b) << std::endl;//出力結果 5
  std::cout << static_cast<int>(c) << std::endl;//出力結果 5
}

出力結果にどれも違いが見られなかったので、それぞれの違いは内容だとわかる。

(int)cについて

これは、明示的型変換という。今の型から強制的に違う型にする方法である。
しかし、このキャストは一時的な変換しかできない。

例.cpp
#include <iostream>

int main(){
  double a = 5.5;

  std::cout << (int)a  << std::endl;//出力結果 5
  std::cout << a << std::endl;//出力結果 5.5 ←ここでdoble型に戻っていることがわかる。

}

int(c)について

調べていたら、変数宣言と書いてあった。しかし、キャストとは無関係なので違うかもしれない。
もう少し調べてみる。
一応プログラムを書いてみたが (int)c との違いは見られなかった。

例.cpp
#include <iostream>

int main(){
  double a = 5.5;

  std::cout << int(a)  << std::endl;//出力結果 5
  std::cout << a << std::endl;//出力結果 5.5

}

ロベールのC++

Argument Dependent Lookup(実引数依存の名前探索)

実引数依存の名前探索 とは、C++において関数呼出時に与えられた引数の型に依存して、呼び出す関数を探索 する仕組みのことである。(wikipedia参照)
この機能のおかげで、前の投稿の getline()std::getline() と書かなくてもコンパイルエラーが出なかった理由である。ただこの機能は、便利だがコードを読みにくくする機能なので使わないほうがいい。 using namespace std と同じで害悪である。

ファイルについて

コメント欄にて便利な方法を教えてもらったので試してみる。

str.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

int main() {
  std::ifstream file;

  file.open("test.txt");
  if(!file){ //変更した
    return EXIT_FAILURE;
  }

  std::string str;
  str << file.rdbuf();//変更

  std::cout << str << std::endl;
}

これでも文字を test.txt からコピーできる。一応実行できて正しく出力できていた。
しかし、 operator error がコンパイルで出てきた。今日は時間がないので明日また調べ直す。

08-06 テキストとバイナリ

ファイルは1バイト単位のデータが並んでいるだけ。ファイルんのデータ構造はメモリと変わらない。このデータを何も変換せずに出力するのが バイナリモード という。 しかし、バイナリモードでは何が書いてるのかわからないため、テキストモードがある。それがテキストファイルである。

c/c++では、改行コードは ¥nに統一されている。しかし、これをwindowsのメモ帳で開くと、改行コードがwindowsと違うため改行がおかしくなる。

テキストモードだと、臨機応変に改行コードを変換してくれるが、バイナリモードだとその変換がない。

バイナリモードを開くときは ios::binary を使うみたい。

終わりに

眠たいので調べ物が丁寧にできなかった。明日やろうと思う。
おやすみなさい

1
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0