emplace_back返回reference

要C++ 17才能使用这一功能。

演示程序:https://en.cppreference.com/w/cpp/container/vector/emplace_back

auto& ref = elections.emplace_back("Nelson Mandela", "South Africa", 1994);
assert(ref.year == 1994 && "uses a reference to the created object (C++17)");

GCC 11 及以上版本默认使用 C++17 标准。加-std=c++11 则编译不过,真真正正画蛇添足。

$ g++ -dM -E -x c++ /dev/null | grep __cplusplus
#define __cplusplus 201703L

加一堆选项让gcc去处理空文件/dev/null

  • -E‌ 使 GCC 在完成预处理阶段后停止,不再进行编译、汇编和链接
    • 预处理后的代码(经过头文件包含和宏展开的代码)输出到stdout
  • -dM‌ 指示编译器在预处理结束后,输出所有已定义的宏名及其值,而不是预处理后的源代码
  • -x c++‌ 指定后续输入文件的编程语言为C++,而不是依赖文件扩展名(如 .cpp)来自动判断

So,常备0.cpp?

不,大胆地puts(__cplusplus); 吧。

不不,printf(str); 才是大胆:当str是"%s"之类时一般会崩。

还有,C++ 17下,return vector时move也是画蛇添足。

posted @ 2025-11-10 19:10  华容道专家  阅读(5)  评论(0)    收藏  举报