C言語のキャストについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Nior

C言語のキャストについて

#1

投稿記事 by Nior » 3年前

C言語のキャストについての質問です。

型の変換だと聞いたのですが、

コード:

 int a = std::atoi("123");

文字列から数値へ変換しています。
これをキャストと呼ぶのでしょうか?

inemaru
記事: 108
登録日時: 4年前

Re: C言語のキャストについて

#2

投稿記事 by inemaru » 3年前

言葉としての意味なのか、プログラム用語としてなのかで変わる気がします。

言葉の意味で考えると、変換を行うのでキャストですが、
プログラム的な意味では、タイプキャストではないので、違うと思います。

アバター
みけCAT
記事: 6312
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: C言語のキャストについて

#3

投稿記事 by みけCAT » 3年前

Nior さんが書きました:

コード:

 int a = std::atoi("123");
これはC言語としては不正なコードです。
Nior さんが書きました:C言語のキャストについての質問です。
C++の間違いではないですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Nior

Re: C言語のキャストについて

#4

投稿記事 by Nior » 3年前

ご意見ありがとうございます。
具体的な例が余計だったでしょうかね。

C言語(C++でもいいです)のキャストをする事によって、メモリの値が書き換わる事がありますか?
という質問です。

inemaru
記事: 108
登録日時: 4年前

Re: C言語のキャストについて

#5

投稿記事 by inemaru » 3年前

先に、気になった点。
Nior さんが書きました:C言語のキャストについての質問です。

型の変換だと聞いたのですが、

コード:

 int a = std::atoi("123");

文字列から数値へ変換しています。
これをキャストと呼ぶのでしょうか?
Nior さんが書きました: C言語(C++でもいいです)のキャストをする事によって、メモリの値が書き換わる事がありますか?
という質問です。
質問内容が変わっていませんか?
(これはキャストですか?→キャストしたらメモリ書き換わりますか?)

[hr]
Nior さんが書きました: C言語(C++でもいいです)のキャストをする事によって、メモリの値が書き換わる事がありますか?
という質問です。
C++であれば、

変換した結果を得るために、キャストしているので
結果が格納されるメモリは、もちろん書き換わるでしょう。

基本的には、キャストによって、キャスト元のメモリは書き換わりませんが
キャストの結果を受け取るメモリは、書き換わると考えれば良いと思います。

ただ、少なくとも初めに提示しているコードは、キャストではなく関数から値を取得しているだけなので、
やはり、質問内容が見えてこないです。

アバター
みけCAT
記事: 6312
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: C言語のキャストについて

#6

投稿記事 by みけCAT » 3年前

Nior さんが書きました:C言語(C++でもいいです)のキャストをする事によって、メモリの値が書き換わる事がありますか?
「キャストをする」の定義が「キャスト演算子を使う」だとすると、
C++でオーバーロードされたキャスト演算子を使うことで、メモリの値が書き換わることはあります。
(そのようなコードはあまり良くないと思いますが)

コード:

#include <iostream>

struct hoge {
	int a;

	// キャスト演算子のオーバーロード
	operator double() {
		return ++a;
	}
};

// レジスタや即値ではなくメモリを使ってくれる可能性を上げるため、staticでないグローバル変数にする
hoge test;

int main(void) {
	test.a = 0;
	// 現在の値を表示する
	std::cout << "test.a = " << test.a << '\n';
	// キャスト演算子を使う
	(double)test;
	// メモリの値が書き換わっていることを確認する
	std::cout << "test.a = " << test.a << '\n';
	return 0;
}
参考:キャスト演算子のオーバーロード - Life like a clown
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Nior

Re: C言語のキャストについて

#7

投稿記事 by Nior » 3年前

ご意見大変参考になりました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る