小编luc*_*rod的帖子

C++ 11"不可移动"类型

可能重复:
为什么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)

c++ gcc clang move-semantics c++11

11
推荐指数
1
解决办法
1740
查看次数

函数调用的序列点?

这是另一个序列点问题,但是一个相当简单的问题:

#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)充当序列点?

c c++ undefined-behavior sequence-points

7
推荐指数
1
解决办法
748
查看次数