【发布时间】:2012-10-24 07:46:44
【问题描述】:
我用 GCC 和 Clang 试过这个程序,但都没有输出
#include <iostream>
struct A {
A(){}
template<typename T>
A(T &) {
std::cout << "copied!";
}
};
void f(...) { }
int main() {
A a;
f(a);
}
根据我的标准阅读,这个程序应该输出"copied!"。谁能告诉我是我弄错了还是这两个编译器的错误?
【问题讨论】:
-
这不是一个“简单的复制构造函数”。
-
只是一般性评论:在不到 10 分钟的学习后对 Johannes Schaub 的问题投反对票 - litb 并不是一件很聪明的事情。
-
"根据我阅读的标准,这个程序应该输出“复制!”。" 我查看了标准,但我找不到它甚至会说话的地方关于可变参数与对象(或其他任何事情)的行为。那是哪里?
-
@durron597 不同之处在于您可以控制对象是动态存储(
A* a = new A)还是自动存储(A a)。 C++ 在这方面更强大,而你对它的反应是没有受过教育的。 -
这个问题没有得到我的 +1,因为它没有解释为什么你认为行为应该不同。没有实际引号的“标准这么说”是没有用的。
标签: c++ c++11 language-lawyer ellipsis