声明者。是的,声明者。它们是许多编码约定辩论的根源。对于争论来说,这是一个非常好的话题——C++ 并不规定哪一个比另一个更好(它不在乎!)。所以我们可以写这些而不用担心有人会取笑你:
int x;
int& a = x;
int &b = x;
int* c = &x;
int *d = &x;
在句法方面,b
并且d
比其他“更有效”。我们需要在名称之前放置声明符修饰符:
int m, *n; // m is an int; n is a pointer to int
但潮流似乎转向了有利于一个。使用 C++11 的可变参数模板,声明符的位置似乎仅限于修饰符更接近基类型的形式:
template<typename... Ts>
void VariadicFuncRef(const Ts&... args) { }
^
template<typename... Ts>
void VariadicFuncPtr(Ts*... args) { }
^
写这些表格是错误的:
template<typename... Ts>
void VariadicFuncRef(const Ts... &args) { }
template<typename... Ts>
void VariadicFuncPtr(Ts... *args) { }
有关具体示例,请单击此处。
所以,我的问题是: 为什么我们仅限于这种(合法的)形式而不能使用另一种?
有什么想法吗?
附加1:我也对为什么这个“规则”“强制执行”的设计决定感兴趣。