C++ c++;使用临时对象rvalue初始化左值引用以及自动推断
我使用/std:c++17在MSVC中成功地执行了以下语句,没有任何编译错误C++ c++;使用临时对象rvalue初始化左值引用以及自动推断,c++,visual-c++,c++17,C++,Visual C++,C++17,我使用/std:c++17在MSVC中成功地执行了以下语句,没有任何编译错误 class A { public: A() { std::cout << "default constructor." << std::endl; } A(const A&) { std::cout << "const A&" << std::endl; } A(A&&a
class A {
public:
A() {
std::cout << "default constructor." << std::endl;
}
A(const A&) {
std::cout << "const A&" << std::endl;
}
A(A&&) {
std::cout << "A&&" << std::endl;
}
int a;
};
A& a = A();
auto& b = A();
A类{
公众:
(){
std::cout如果您使用/Wall
标志编译,编译器将给出答案:
warning C4239: nonstandard extension used: 'initializing': conversion from 'A' to 'A &'
note: A non-const reference may only be bound to an lvalue
warning C4239: nonstandard extension used: 'initializing': conversion from 'A' to 'A &'
note: A non-const reference may only be bound to an lvalue
也就是说,根据C++17标准,该程序的格式确实不正确,但使用了MSVC非标准扩展。请注意,您的程序因/std:latest
而被拒绝,这在MSVC方面似乎是一个不错的决定,因为这是一个相当危险的扩展