1

据我了解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。

4

1 回答 1

1

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

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

太可怕了。在这些情况下,我会坚持使用typedefs,但我可以想象在某些情况下可能需要这样的行为。使用宏,它变得不那么可怕了:

#define decltype_restrict(x) typename std::remove_reference<decltype((x)[0])>::type *restrict
decltype_restrict(get_some_string()) a = get_some_string( );
于 2013-06-25T19:09:57.503 回答