小编Enz*_*zos的帖子

为什么复制和移动构造函数一起调用?

请考虑以下代码:

#include <iostream>
#include <vector>
using namespace std;

class A
{
public:
     A(int) { cout << "int" << endl; }
     A(A&&) { cout << "move" << endl; }
     A(const A&) { cout << "copy" << endl; }
};

int main()
{
    vector<A> v
    {
        A(10), A(20), A(30)
    };

    _getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

int
int
int
copy
copy
copy
Run Code Online (Sandbox Code Playgroud)

A(10),A(20)并且A(30)是临时对象,对不对?

那么为什么复制构造函数被调用?不应该调用移动构造函数吗?

路过move(A(10)),move(A(20)),move(A(30))相反,输出为:

int
move
int
move
int
move
copy …
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor move-constructor move-semantics c++11

21
推荐指数
2
解决办法
1569
查看次数

有点担心constexpr功能

请考虑以下代码:

constexpr const int* address(const int& r)
{
   return &r;
}


int main()
{
   int x = 10;
   constexpr const int* p = address(x); //error

   _getch();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是一个错误:"函数调用必须在常量表达式中具有常量值".好.

两个问题:

  1. 如果'x'被声明为静态,则没有错误.为什么?

  2. 如何在编译过程中获取变量地址?它们不是在运行时分配的吗?

c++ c++11

12
推荐指数
2
解决办法
1026
查看次数