以下函数在C++ 03或C++ 11中是安全的还是展示了UB?
string const &min(string const &a, string const &b) {
return a < b ? a : b;
}
int main() {
cout << min("A", "B");
}
Run Code Online (Sandbox Code Playgroud)
可以通过引用返回对传递给函数的对象的引用吗?
是否保证临时string对象不会过早销毁?
给定的函数是否有
min可能展示UB(如果它不在给定的上下文中)?
是否有可能在避免复制或移动的同时提供同等但安全的功能?
Mik*_*our 29
可以通过引用返回对传递给函数的对象的引用吗?
只要在通过该引用访问对象之前没有销毁该对象,是的.
是否保证临时
string对象不会过早销毁?
在这种情况下,是的.临时持续到创建它的完整表达式结束,因此在流式传输之前它不会被销毁cout.
给定的函数min是否有可能展示UB(如果它不在给定的上下文中)?
是的,这是一个例子:
auto const & r = min("A", "B"); // r is a reference to one of the temporaries
cout << r; // Whoops! Both temporaries have been destroyed
Run Code Online (Sandbox Code Playgroud)
是否有可能在避免复制或移动的同时提供同等但安全的功能?
我不这么认为; 但只要你不保持对结果的引用,这个函数就是安全的.
| 归档时间: |
|
| 查看次数: |
891 次 |
| 最近记录: |