一文字 (char
) を文字列 (std::string
) にするにあたってこのような書き方は言語仕様上は許されますか?
#include <string> int main(){ char c = 'a'; std::string s(&c, 1); return 0; }
それというのも、 C++11 の「5.7 Additive operators」にはこのような文面があるからです。
(略)
additive-expression: multiplicative-expression additive-expression + multiplicative-expression additive-expression - multiplicative-expression
(略)
For the purposes of these operators, a pointer to a nonarray object behaves the same as a pointer to the first element of an array of length one with the type of the object as its element type.
(略)
配列ではないオブジェクトへのポインタが長さ 1 の配列の先頭要素を指すポインタと互換性を持つのは「加減算の二項演算の左右どちらかに表れるときに限って」とも解釈できます。
operators という語は字句的に二項演算子の +
と -
に限定して言っているのか、それとも additive-expression に該当する全て (変数名一個として表れるときも含む) と解釈しても良いのでしょうか。
対象の規格
基本的には C++11 を想定していますが、後の変更で解釈が変わっているといったような補足事項があれば教えてくれるとありがたいです。
注意点
現実には上記のプログラムが期待通り動作しないなんてことはないだろうというのは承知しています。
あくまでも C++ の規格についての質問なので実際の処理系 (標準ライブラリ) がどのように動作するかを回答に含めないでください。
回答3件
あなたの回答
tips
プレビュー