前置き
最近Scalaを勉強しています。Scala勉強している時に、変数宣言周りでC++でもこう書けたらいいなと思うことが2つあったので晒してみます。
変数宣言・定義時の型の後置
関数の戻り値の型が後置できるのだから、変数の型も後置で来てもいいじゃないか、というものです。出来る必要はないけど、関数で可能のに変数は不可能にする理由もないだろう、と思いました(が既存の文法と衝突してしまうとか理由があって入らなかったのかな、とも思います)
想像サンプル
auto a -> int; auto b -> const char* = "hello"; //const auto c -> int = 42; // エラー
autoはマーカーとして存在し、constなどの修飾は後ろの型につけます。
const/constexprの変数宣言時に限りautoが省略できる
const auto <識別子> = <式>
またはconstexpr auto <識別子> = <定数式>
と定数を定義する時に限り、 const <識別子> = <式>
またはconstexpr <識別子> = <定数式>
と、auto
を省略可能とし、その場合const auto
やconstexpr auto
と書いたと見做されるようにしてみたらどうだろう、というものです。
想像サンプル
const a = runtime_func(); // const auto a = runtime_func();と同じ constexpr b = 10; // constexpr auto b = 10;と同じ
const
、constexpr
の定数定義の場合、必ず初期化する式がありますから、その式から型は推論可能です。問題は文法です。クラスの静的メンバ変数の場合など問題がありそうです。
class X { static const value; // ダメそう }; const X::value = 10;
2つのどちらの文法も思いつきで穴だらけですが、こんな風な機能が入ってくれたらいいなと思いました。