[[noreturn]]
[[noreturn]]は、関数が決して返らないことを示すための属性です。
用途は
- コンパイラの最適化
- return文の省略
"return文の省略"ということを掘り下げていきます。例外処理を書いていて戻り値がないとコンパイラに怒られてしまい意味のない戻り値を追加したことはないでしょうか。
void throw_error()
{
throw std::runtime_error("error~~~");;
}
int func()
{
int ret = /*何か処理*/
if (ret > -1) {
return 1;
}
// 例外投げるだけだからreturnは不要
throw_error();
// だけどコンパイラに怒られるためreturn追加
return -1;
}
このようなとき[[noreturn]]を使うとコンパイラの警告を止めることができます。returnを返さないときに使うので例外をthrowするだけの関数を作った時は使うという使い方ができます。
[[noreturn]] void throw_error()
{
throw std::runtime_error("error~~~");;
}
int func()
{
int ret = /*何か処理*/
if (ret > -1) {
return 1;
}
// コンパイラもreturnがないことを知っているため怒らない
throw_error();
}
Author And Source
この問題について([[noreturn]]), 我々は、より多くの情報をここで見つけました https://zenn.dev/yae/articles/ff7de39eaacbc9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol