[過去ログ] C++相談室 part150 (935レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
855(4): 2020/05/11(月)10:06 ID:ihiMo4aq(1/3) AAS
関数内で宣言した変数を途中でconst化したいときってどうやったらいいですか?
関数というのはこんな感じです
void func() {
int a;
〜aの値を設定する百行くらいの処理〜
〜aを用いたメイン処理。途中で誤ってaを変更しないようにしたい〜
}
aをconstで宣言しておいてaを設定するところはconst_castするというのはやりたくないです。
初期化用関数initializeを作って const int a = initialize(〜); とするしか方法はないですか?
できればそれもしたくないのですが
857(1): 2020/05/11(月)10:13 ID:vLTbwMZ+(1/2) AAS
>>855
a に設定する値を求める処理を関数化して、その戻り値でconstのaを初期化する。
859(1): 2020/05/11(月)10:18 ID:m+8/4tPw(1) AAS
>>855
初期化用関数を作るのが嫌な理由は何?
外のスコープに名前を付けて置くのが嫌ということならラムダ式で済むと思うんだけど。
860(3): 2020/05/11(月)10:53 ID:ihiMo4aq(2/3) AAS
>>857>>859
関数作るのが嫌なのは、気分ですね。バカバカしい理由ですみません。
関数外に置くのが嫌でラムダ式は多用しているのですが、使うときはある程度まとまった処理をするときなので
初期化程度のことにラムダ式を持ち出すのは大仰な気がしてやりたくありません。
これまた個人的な好みで恐縮ですが。
(ちなみに>>855で挙げた初期化処理が百行くらいというのは大げさで、概ね数行くらいです。)
864(1): はちみつ餃子 ◆8X2XSCHEME 2020/05/11(月)11:37 ID:pGzfxkdL(1) AAS
GCC や Clang の拡張を使ってよいならこういう書き方は出来る。
void func() {
const int a = ({int a; a=1; a;}); // ブロック内で初期化処理を書いて値を返す
std::cout << a << std::endl; // メイン処理
}
たぶん >>855 が考えている用途だとこれが一番楽なんじゃなかろうかと思うんだけど、
標準ではないってのはやっぱりネックになってくるな。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.228s*