添加直接返回vector<Foo>拷贝测试“
This commit is contained in:
parent
ca66456a83
commit
c567cb30d1
@ -9,4 +9,7 @@ add_executable(cppbase
|
|||||||
"grammar/grammar.h" "algorithm/CAlgorithm.cpp" "algorithm/CAlgorithm.h"
|
"grammar/grammar.h" "algorithm/CAlgorithm.cpp" "algorithm/CAlgorithm.h"
|
||||||
)
|
)
|
||||||
add_executable(algorithm_bin "algrorithm.cpp" "algorithm/ABasic.cpp" "algorithm/ABasic.h")
|
add_executable(algorithm_bin "algrorithm.cpp" "algorithm/ABasic.cpp" "algorithm/ABasic.h")
|
||||||
add_executable(object_bin "object.cpp")
|
add_executable(object_bin "object.cpp"
|
||||||
|
"src/verify.h" "src/verify.cpp"
|
||||||
|
"ex_object.h" "ex_object.cpp"
|
||||||
|
)
|
@ -6,4 +6,5 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
|||||||
add_executable(cppstl main.cpp
|
add_executable(cppstl main.cpp
|
||||||
"STLUse.h" "STLUse.cpp"
|
"STLUse.h" "STLUse.cpp"
|
||||||
"smart_ptr.h" "smart_ptr.cpp"
|
"smart_ptr.h" "smart_ptr.cpp"
|
||||||
|
"../ex_object.h" "../ex_object.cpp"
|
||||||
)
|
)
|
||||||
|
@ -1,47 +1,22 @@
|
|||||||
#include "ex_object.h"
|
#include "ex_object.h"
|
||||||
|
|
||||||
// 左值引用与右值引用
|
CHouse::CHouse() : value(99)
|
||||||
void lrvalue()
|
|
||||||
{
|
{
|
||||||
// 左值引用与右值引用有什么区别,左值引用和右值引用的目的是什么?
|
std::cout << "CHouse()" << std::endl;
|
||||||
}
|
}
|
||||||
// 复制构造函数,仅接受左值。
|
|
||||||
// CHouse::CHouse(CHouse& rh)
|
CHouse::CHouse(const CHouse& rh) : value(99)
|
||||||
// {
|
|
||||||
// std::cout << "构造函数(仅接受左值)" << std::endl;
|
|
||||||
// }
|
|
||||||
// 复制构造函数,左值右值均可。
|
|
||||||
CHouse::CHouse(const CHouse& rh)
|
|
||||||
{
|
{
|
||||||
std::cout << "构造函数(左值右值均可)" << std::endl;
|
std::cout << "CHouse(const CHouse& rh)" << std::endl;
|
||||||
}
|
}
|
||||||
// 移动构造函数仅接受右值。
|
|
||||||
CHouse::CHouse(CHouse&& rv) noexcept
|
CHouse::CHouse(CHouse&& rv) noexcept : value(99)
|
||||||
{
|
{
|
||||||
// 移动语义要修改rv的值,故不能使用const。
|
std::cout << "CHouse(CHouse&& rv)" << std::endl;
|
||||||
std::cout << "移动构造函数(仅接受右值)" << std::endl;
|
|
||||||
}
|
}
|
||||||
// 赋值构造函数,左右值均可。
|
|
||||||
CHouse& CHouse::operator=(const CHouse& rh)
|
CHouse& CHouse::operator=(const CHouse& rh)
|
||||||
{
|
{
|
||||||
// 需要前面已经定义,否则调用的时复制构造函数。ß
|
std::cout << "operator=(const CHouse& rh)" << std::endl;
|
||||||
std::cout << "赋值构造函数(左右值均可)" << std::endl;
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 赋值构造函数,仅接受右值。
|
|
||||||
// CHouse& CHouse::operator=(CHouse&& rv) noexcept
|
|
||||||
// {
|
|
||||||
// std::cout << "赋值构造函数(仅接受右值)" << std::endl;
|
|
||||||
// return *this;
|
|
||||||
// }
|
|
||||||
|
|
||||||
void demo()
|
|
||||||
{
|
|
||||||
CHouse houseA;
|
|
||||||
CHouse houseB = std::move(houseA);
|
|
||||||
CHouse houseC = houseB;
|
|
||||||
houseA = houseB;
|
|
||||||
CHouse houseD(houseC);
|
|
||||||
CHouse houseE(std::move(houseD));
|
|
||||||
}
|
|
@ -2,22 +2,21 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
// 左值引用与右值引用
|
|
||||||
void lrvalue();
|
|
||||||
|
|
||||||
// std::move 与 类的各种构造
|
// std::move 与 类的各种构造
|
||||||
|
// const CHouse& rh 左右值均可。
|
||||||
|
// CHouse& rh 仅接受左值。
|
||||||
|
// CHouse&& rv 仅接受右值。
|
||||||
class CHouse
|
class CHouse
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CHouse() = default;
|
int value;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CHouse();
|
||||||
~CHouse() = default;
|
~CHouse() = default;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//CHouse(CHouse& rh); // 复制构造函数,仅接受左值。
|
CHouse(const CHouse& rh);
|
||||||
CHouse(const CHouse& rh); // 复制构造函数,左值右值均可。
|
CHouse(CHouse&& rv) noexcept;
|
||||||
CHouse(CHouse&& rv) noexcept; // 移动构造函数仅接受右值。
|
CHouse& operator=(const CHouse& rh);
|
||||||
CHouse& operator=(const CHouse& rh); // 赋值构造函数,左右值均可。
|
|
||||||
//CHouse& operator=(CHouse&& rv) noexcept; // 赋值构造函数,仅接受右值。
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void demo();
|
|
@ -1,8 +1,8 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include "src/verify.h"
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
|
verify_basic_container();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
26
cppbase/src/verify.cpp
Normal file
26
cppbase/src/verify.cpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#include "verify.h"
|
||||||
|
#include "../ex_object.h"
|
||||||
|
#include <vector>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
std::vector<CHouse> get_house()
|
||||||
|
{
|
||||||
|
std::vector<CHouse> house;
|
||||||
|
house.resize(5);
|
||||||
|
return house;
|
||||||
|
}
|
||||||
|
|
||||||
|
void verify_basic_container()
|
||||||
|
{
|
||||||
|
// 1.直接返回
|
||||||
|
// MSVC 可直接返回。
|
||||||
|
// GNU 未测试
|
||||||
|
// CLANG 未测试
|
||||||
|
std::vector<CHouse> data = get_house();
|
||||||
|
for (const auto& item : data) {
|
||||||
|
std::cout << item.value << " ";
|
||||||
|
}
|
||||||
|
std::cout << "\n";
|
||||||
|
|
||||||
|
std::cout << "End." << std::endl;
|
||||||
|
}
|
6
cppbase/src/verify.h
Normal file
6
cppbase/src/verify.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#ifndef VERIFY_HEADER
|
||||||
|
#define VERIFY_HEADER
|
||||||
|
|
||||||
|
void verify_basic_container();
|
||||||
|
|
||||||
|
#endif // VERIFY_HEADER
|
Loading…
x
Reference in New Issue
Block a user