将变量定义为自动限制

时间:2013-06-25 18:39:00

标签: c++ c++11 auto restrict-qualifier

据我所知restrict,它将指针标记为对函数中特定数据的唯一引用。我经常看到它在函数参数中使用,但这似乎也是有益的:

char *restrict a = get_some_string( );
char *restrict b = get_some_other_string( );

(因此编译器知道更改a永远不会更改b,并且可以进行额外的优化。

如果get_some_string返回非常复杂的类型,最好使用auto关键字;

auto a = get_some_string( );
auto b = get_some_other_string( );

但是使用auto restrict会触发错误“限制需要一个指针”。那么,我该如何结合这些呢?


如评论中所述,restrict不是C ++中的标准关键字;我忘记了我的项目中有#define restrict __restrict__行,它在GCC中有效。

1 个答案:

答案 0 :(得分:1)

由于评论中提出了一种解决方案,我会在此发布以供将来参考; (增加使其变得健壮)

typename std::remove_reference<decltype(get_some_string()[0])>::type *restrict a = get_some_string( );

太恐怖了。在这些情况下我会坚持typedef,但我可以想象可能存在这样的行为是必要的。使用宏,它变得有点不那么可怕了:

#define decltype_restrict(x) typename std::remove_reference<decltype((x)[0])>::type *restrict
decltype_restrict(get_some_string()) a = get_some_string( );