我的问题是要了解这两个构造函数究竟是如何工作的.我有这门课:
class moveClass
{
int variabile;
public:
moveClass(){}
//move constructor
moveClass(moveClass && arg)
{
cout<<"Call move constructor"<<endl;
variabile = arg.variabile;
}
//copy constructor
moveClass(const moveClass & arg)
{
cout<<"Call copy constructor"<<endl;
variabile = arg.variabile;
}
};
Run Code Online (Sandbox Code Playgroud)
根据我的理解,当我实例化该类的新对象时,将根据参数的类型调用构造函数.
移动构造函数的优点是当rvalue用于实例化对象时,该对象不会被复制,而只是被移动.
1 moveClass a;
2 moveClass b = a;
3 moveClass c = std::move(a);
Run Code Online (Sandbox Code Playgroud)
考虑到这个例子,我可以说当我实例b时,a被复制,然后分配给b?
换句话说,直到第2行,我将在内存中有3个对象:a,b和a_copy.
而第3行只会创建c对象而没有新的复制对象.
基本上在这三行的末尾,我将在内存中有4个对象.它是否正确?
构造函数的代码也是一样的,所以我希望唯一的区别是传递的参数的类型.
如果您在 CMake 中使用全局文件列表file(GLOB..),则所有文件都会列出并附加其完整路径。
如何在 CMake 中 glob 一组文件,仅保存文件名?
我阅读了官方手册,在这里我发现了这一点:
file(GLOB <variable>
[LIST_DIRECTORIES true|false] [RELATIVE <path>]
[<globbing-expressions>...])
Run Code Online (Sandbox Code Playgroud)
和
By default GLOB lists directories - directories are omitted in result
if LIST_DIRECTORIES is set to false.
Run Code Online (Sandbox Code Playgroud)
我尝试了这些解决方案,但没有一个有效:
file(GLOB_RECURSE src_files LIST_DIRECTORIES false ${SRC})
file(GLOB_RECURSE src_files LIST_DIRECTORIES=false ${SRC})
file(GLOB_RECURSE src_files LIST_DIRECTORIES(false) ${SRC})
set(LIST_DIRECTORIES false)
file(GLOB_RECURSE src_files ${SRC})
Run Code Online (Sandbox Code Playgroud)
我的输出始终是附加完整路径的文件列表。我知道我可以使用 RELATIVE 来相应地设置路径,但如果可以的话我宁愿避免它。
如果标题有点误导,我很抱歉.
我有一个循环一些数据的函数.每次迭代时此数据的类型都会发生变化.
基本上我有这样的事情:
for(int i = 0; i < limit; i++)
{
type object;
object.do_stuff();
}
Run Code Online (Sandbox Code Playgroud)
这里例如在第一次迭代中"type"将是int,在第二次迭代时"type"将是double,等等.
我不能使用varyadic模板,因为我有超过100个元素,据我所知,它对系统非常重要.
我的想法是创建一个"typedef的向量"来循环所有类型的对象.
vector<????> type;
type.push_back(int);
type.push_back(double);
...
for(int i = 0; i < limit; i++)
{
type[i] object;
object.do_stuff();
}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否可能.
我看到了类型列表的基础知识,但我不知道是否可以重现循环.