可能重复:
为什么C++ 11删除的函数参与重载解析?
我有两个关于以下C++ 11代码的问题:
#include <iostream>
using namespace std;
struct A {
A() { cout << "Default c-tor" << endl; }
A(const A&) { cout << "Copy c-tor" << endl; }
A(A&&) = delete;
};
A f()
{
A a;
return a;
}
int main()
{
A b = f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我用gcc和clang得到以下编译错误
gcc-4.7.2(g ++ --std = c ++ 11 main.cpp):
main.cpp: In function ‘A f()’:
main.cpp:16:9: error: use of deleted function ‘A::A(A&&)’
main.cpp:8:2: error: declared here
main.cpp: …Run Code Online (Sandbox Code Playgroud) 这是另一个序列点问题,但是一个相当简单的问题:
#include <stdio.h>
void f(int p, int) {
printf("p: %d\n", p);
}
int g(int* p) {
*p = 42;
return 0;
}
int main() {
int p = 0;
f(p, g(&p));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是未定义的行为吗?或者调用g(&p)充当序列点?