【发布时间】:2020-09-19 12:48:42
【问题描述】:
与此one相关的问题。通过追踪slt_pair. h 和move. h,似乎Clang 和G++ 之间的区别在于内部。我试图模拟对象的分配(pair.first)与std_pair.h的实现相同,输出与Clang输出相同,它是合理的输出,但为什么使用pairs时它会发生变化.
#include <iostream>
struct Foo {
Foo() {
std::cout << "default" << std::endl;
}
Foo(Foo& f2) {
std::cout << "non-const" << std::endl;
}
Foo(const Foo& f2) {
std::cout << "const" << std::endl;
}
};
// static_cast Foo lvalue to rvalue
Foo cast1(Foo foo){
return static_cast<Foo&&>(foo);
}
// same : check weather foo and Foo are the same type
Foo cast2(Foo foo){
return static_cast<typename std::remove_reference<Foo>::type&&>(foo);
}
int main() {
Foo T1; // pair Foo object
std::cout<<"Start"<<std::endl;
std::cout<<std::endl;
// (&&) rvalue casting
T1 = cast2(Foo()); // First pair object
std::cout << std::endl;
Foo const foo = T1;// Second pair object
}
Clang 如何处理从 lvalue 到 rvalue 的转换以及这些不同输出的真正原因。
非常感谢任何意见,谢谢。
更新:我在接受的 cmets 部分得到了令人满意的答案。
【问题讨论】:
-
“似乎 Clang 和 G++ 之间的区别在于内部” 链接的问答似乎说区别在于
std::pair实现,而不是编译器行为。 “输出与 Clang 相同” “这些不同输出的真正原因是什么” 你得到 GCC 和 Clang 的相同输出还是不同的输出?如果相同,那么问题到底是什么? -
@HolyBlackCat,我提到的另一个问题是使用对,在这种情况下,它们给出了不同的结果。使用对而不是这些分配时的区别。
标签: c++ g++ clang llvm lvalue-to-rvalue