添加直接返回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"
|
||||
)
|
||||
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
|
||||
"STLUse.h" "STLUse.cpp"
|
||||
"smart_ptr.h" "smart_ptr.cpp"
|
||||
"../ex_object.h" "../ex_object.cpp"
|
||||
)
|
||||
|
@ -1,47 +1,22 @@
|
||||
#include "ex_object.h"
|
||||
|
||||
// 左值引用与右值引用
|
||||
void lrvalue()
|
||||
CHouse::CHouse() : value(99)
|
||||
{
|
||||
// 左值引用与右值引用有什么区别,左值引用和右值引用的目的是什么?
|
||||
std::cout << "CHouse()" << std::endl;
|
||||
}
|
||||
// 复制构造函数,仅接受左值。
|
||||
// CHouse::CHouse(CHouse& rh)
|
||||
// {
|
||||
// std::cout << "构造函数(仅接受左值)" << std::endl;
|
||||
// }
|
||||
// 复制构造函数,左值右值均可。
|
||||
CHouse::CHouse(const CHouse& rh)
|
||||
|
||||
CHouse::CHouse(const CHouse& rh) : value(99)
|
||||
{
|
||||
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 << "移动构造函数(仅接受右值)" << std::endl;
|
||||
std::cout << "CHouse(CHouse&& rv)" << std::endl;
|
||||
}
|
||||
// 赋值构造函数,左右值均可。
|
||||
|
||||
CHouse& CHouse::operator=(const CHouse& rh)
|
||||
{
|
||||
// 需要前面已经定义,否则调用的时复制构造函数。ß
|
||||
std::cout << "赋值构造函数(左右值均可)" << std::endl;
|
||||
std::cout << "operator=(const CHouse& rh)" << std::endl;
|
||||
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>
|
||||
|
||||
// 左值引用与右值引用
|
||||
void lrvalue();
|
||||
|
||||
// std::move 与 类的各种构造
|
||||
// const CHouse& rh 左右值均可。
|
||||
// CHouse& rh 仅接受左值。
|
||||
// CHouse&& rv 仅接受右值。
|
||||
class CHouse
|
||||
{
|
||||
public:
|
||||
CHouse() = default;
|
||||
int value;
|
||||
|
||||
public:
|
||||
CHouse();
|
||||
~CHouse() = default;
|
||||
|
||||
public:
|
||||
//CHouse(CHouse& rh); // 复制构造函数,仅接受左值。
|
||||
CHouse(const CHouse& rh); // 复制构造函数,左值右值均可。
|
||||
CHouse(CHouse&& rv) noexcept; // 移动构造函数仅接受右值。
|
||||
CHouse& operator=(const CHouse& rh); // 赋值构造函数,左右值均可。
|
||||
//CHouse& operator=(CHouse&& rv) noexcept; // 赋值构造函数,仅接受右值。
|
||||
CHouse(const CHouse& rh);
|
||||
CHouse(CHouse&& rv) noexcept;
|
||||
CHouse& operator=(const CHouse& rh);
|
||||
};
|
||||
|
||||
void demo();
|
@ -1,8 +1,8 @@
|
||||
#include <iostream>
|
||||
#include "src/verify.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
|
||||
verify_basic_container();
|
||||
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