C++学习笔记(四十三):c++ optional

发布时间:2024年01月17日

本节介绍的是c++17中另一个新特性optional,用来处理可能存在也可能不存在的数据。接下来通过代码来展示该新特性。

  • 接下来通过代码展示为什么需要optional这个新特性
  • #include <iostream>
    #include <string>
    #include <fstream>
    
    //读取文件中的内容通过字符串的形式返回
    std::string ReadFileAsString(const std::string& filename)
    {
    	//一般的做法如下
    	std::ifstream stream(filename);
    	if (stream)
    	{
    		//read file
    		stream.close();
    		std::string result;  //假想result就是我们从文件中读到的字符串
    		return result;
    	}
    	return std::string();  //如果打开文件失败,则返回一个空字符串,但这样存在一个问题,如果文件本身就是空的,
    	                       //返回的也是空字符串,这样我们就不能确定是打开文件失败导致还是文件本身是空导致
    
    }
    
    int main()
    {
    	
    
    	std::cin.get();
    }
  • 使用optional新特性后的代码如下:?

  • #include <iostream>
    #include <string>
    #include <fstream>
    #include <optional>
    
    //读取文件中的内容通过字符串的形式返回
    std::optional<std::string> ReadFileAsString(const std::string& filename)
    {
    	//一般的做法如下
    	std::ifstream stream(filename);
    	if (stream)
    	{
    		//read file
    		stream.close();
    		std::string result;  //假想result就是我们从文件中读到的字符串
    		return result;
    	}
    	return {};  //如果打开文件失败,则返回一个空字符串,但这样存在一个问题,如果文件本身就是空的,
    	                       //返回的也是空字符串,这样我们就不能确定是打开文件失败导致还是文件本身是空导致
    
    }
    
    int main()
    {
    	std::optional<std::string> date = ReadFileAsString("D:\date.txt");//这个文件是空文件,里面没有任何内容
    	if (date.has_value())
    	{
    		std::cout << "打开文件成功" << std::endl;
    	}
    	else
    	{
    		std::cout << "打开文件失败" << std::endl;
    	}
    
    	std::cin.get();
    }

    上述程序返回结果是“打开文件成功”,data.value()返回的是空字符串。

文章来源:https://blog.csdn.net/qq_16701727/article/details/135649811
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。