我的编译器允许“T&...”。这是一个扩展吗?

发布于 2024-10-15 22:43:15 字数 176 浏览 1 评论 0原文

当以下工作起作用时,我感到很惊讶,

template<typename T>
void f(T &...);

我认为我必须将“T”声明为“typename ...T”,并且它仅适用于 C++0x。但上面是在严格的C++03模式下编译的。这是怎么回事?

I was surprised when the following worked

template<typename T>
void f(T &...);

I thought that I have to declare "T" as "typename ...T" then, and that it only works in C++0x. But the above compiled in strict C++03 mode. What's going on?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挖个坑埋了你 2024-10-22 22:43:15

这只是糟糕的旧 C 可变参数语法;语法允许省略逗号。以下是等效的:

int printf(const char* fmt, ...);
int printf(const char* fmt...);

It's just the bad old C varargs syntax; the grammar allows omitting the comma. The following are equivalent:

int printf(const char* fmt, ...);
int printf(const char* fmt...);
半暖夏伤 2024-10-22 22:43:15

你调用了这个函数吗?模板函数在调用之前不会被编译。
在 Visual Studio 2010 中,IntelliSense 显示该函数的真实语法闻起来

template <class T> void f(T&, ...)

像旧的变量参数语法。

Did you call the function? Template functions don't get compiled until you call them.
And in Visual Studio 2010, IntelliSense shows the real syntax of that function would be

template <class T> void f(T&, ...)

Smells like old variable argument syntax.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文