据我所知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中有效。
答案 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( );