这篇文章主要围绕c–通过迭代器进行basic_string转换是否合法?和c迭代器编写展开,旨在为您提供一份详细的参考资料。我们将全面介绍c–通过迭代器进行basic_string转换是否合法?的优缺
这篇文章主要围绕c – 通过迭代器进行basic_string转换是否合法?和c迭代器编写展开,旨在为您提供一份详细的参考资料。我们将全面介绍c – 通过迭代器进行basic_string转换是否合法?的优缺点,解答c迭代器编写的相关问题,同时也会为您带来.net – 在Visual Basic关键字(例如`String`)上使用CLR类型(例如`System.String`或`[String]`)是否有任何可以想象的优势?、basic_string, string, wstring、boost::asio 序列 15: basic_socket、boost::asio序列17: basic_datagram_socket 和 basic_stream_socket的实用方法。
本文目录一览:- c – 通过迭代器进行basic_string转换是否合法?(c迭代器编写)
- .net – 在Visual Basic关键字(例如`String`)上使用CLR类型(例如`System.String`或`[String]`)是否有任何可以想象的优势?
- basic_string, string, wstring
- boost::asio 序列 15: basic_socket
- boost::asio序列17: basic_datagram_socket 和 basic_stream_socket
c – 通过迭代器进行basic_string转换是否合法?(c迭代器编写)
std::u16string str16; //str16 is set here; std::string cStr(str16.cbegin(),str16.cend());
在VS 2013中它似乎工作正常.
解决方法
正如评论中所指出的,这不会将您的字符串转换为其他编码. (话虽如此,它可能适用于字符串只包含ASCII字符的情况.那就是说,不要这样做.)
.net – 在Visual Basic关键字(例如`String`)上使用CLR类型(例如`System.String`或`[String]`)是否有任何可以想象的优势?
> What is the difference between String and string in C#?
到目前为止,我的印象是VB.NET也是如此. language specification甚至说(强调我的):
The primitive types are identified through keywords,which are aliases for predefined types in the System namespace. A primitive type is completely indistinguishable from the type it aliases: writing the reserved word Byte is exactly the same as writing System.Byte.
因此,我非常惊讶地看到Visual Studio 2015有所不同:Visual Studio允许您指定框架名称(Int32 / Int64 / DateTime / …)的首选项(工具/选项/文本编辑器/基本/代码样式)原生VB关键字(整数/长/日/ …).
问题是:一旦告诉Visual Studio您更喜欢Framework名称,自动生成的代码使用[String](使用[] VB关键字转义,类似于C#的@)而不是String(对象,单一和所有相同) VB关键字与Framework类型名称匹配的其他类型).我认为这是错误的(并已提交了Connect issue),因为括号使代码混乱,并且如上所示,无论您使用[String](由于VB的自动系统导入有效地引用System.String),它都不会产生语义差异)或String(VB关键字别名System.String).
但是,由于Visual Studio开发人员非常聪明,所以我完全有可能忽略了某些东西,并且使用[String]而不是String实际上是有意义的,因此我的问题是:
在Visual Basic中使用[String]而不是String是否有任何可以想象的优势,或者Visual Studio编辑器只是“做错了什么”并且无用地混乱自动生成的代码?
解决方法
basic_string, string, wstring
string只是basic_string的宏定义,是一种特化。
我们使用vector要指定类型vector<int>,但是string不需要。因为已经指定了类型。
basic_string才是一个STL中的sequence container,
std::string类是std::basic_string模板在char类型上的一个特化。
std::wstring类是std::basic_string模板在wchar_t类型上的一个特化。
typedef basic_string<char, char_traits<char>, allocator<char> >string;
typedef basic_string<wchar_t, char_traits<wchar_t>,allocator<wchar_t> > wstring;
所以string和wstring就没有特别之处了
boost::asio 序列 15: basic_socket
explicit basic_socket(const executor_type& ex) | 创建 & 未打开的 socket |
template <typename ExecutionContext> explicit basic_socket(ExecutionContext& context, typename enable_if< is_convertible<ExecutionContext&, execution_context&>::value >::type* = 0) |
创建 & 未打开的 socket |
basic_socket(const executor_type& ex, const protocol_type& protocol) | 创建 & 打开 socket |
template <typename ExecutionContext> basic_socket(ExecutionContext& context, const protocol_type& protocol, typename enable_if< is_convertible<ExecutionContext&, execution_context&>::value >::type* = 0) |
创建 & 打开 socket |
basic_socket(const executor_type& ex, const endpoint_type& endpoint) | 创建 & 打开 & 绑定 local endpoint 的 socket |
template <typename ExecutionContext> basic_socket(ExecutionContext& context, const endpoint_type& endpoint, typename enable_if< is_convertible<ExecutionContext&, execution_context&>::value >::type* = 0) |
创建 & 打开 & 绑定 local endpoint 的 socket |
basic_socket(const executor_type& ex, const protocol_type& protocol, const native_handle_type& native_socket) |
对已经创建的原生套接字创建 socket |
template <typename ExecutionContext> basic_socket(ExecutionContext& context, const protocol_type& protocol, const native_handle_type& native_socket, typename enable_if< is_convertible<ExecutionContext&, execution_context&>::value >::type* = 0) |
对已经创建的原生套接字创建 socket |
basic_socket(basic_socket&& other) | 从一个 socket 移动构造到另一个 socket |
basic_socket& operator=(basic_socket&& other) | 从一个 socket 移动构造到另一个 socket |
template <typename Protocol1, typename Executor1> basic_socket(basic_socket<Protocol1, Executor1>&& other, typename enable_if< is_convertible<Protocol1, Protocol>::value && is_convertible<Executor1, Executor>::value >::type* = 0) |
从一个 socket 移动构造到另一个 socket |
template <typename Protocol1, typename Executor1> typename enable_if< is_convertible<Protocol1, Protocol>::value && is_convertible<Executor1, Executor>::value, basic_socket& >::type operator=(basic_socket<Protocol1, Executor1> && other) |
从一个 socket 移动构造到另一个 socket |
executor_type get_executor() | 获取执行器 |
lowest_layer_type& lowest_layer() | 获取 basic_socket 对象的引用 |
void open(const protocol_type& protocol = protocol_type()) | 打开指定协议的 socket |
BOOST_ASIO_SYNC_OP_VOID open(const protocol_type& protocol, boost::system::error_code& ec) |
打开指定协议的 socket & 返回错误信息 |
void assign(const protocol_type& protocol, 和 BOOST_ASIO_SYNC_OP_VOID assign(const protocol_type& protocol, |
创建 & 打开 socket 控制原生 socket |
bool is_open() | 判断 socket 是否打开 |
void close() 和 BOOST_ASIO_SYNC_OP_VOID close(boost::system::error_code& ec) |
关闭 socket |
native_handle_type release() 和 native_handle_type release(boost::system::error_code& ec) |
释放对原生 socket 的控制 |
native_handle_type native_handle() | 获取原生 socket |
void cancel() 和 BOOST_ASIO_SYNC_OP_VOID cancel(boost::system::error_code& ec) |
取消异步操作 |
bool at_mark() 和 bool at_mark(boost::system::error_code& ec) |
确定套接字是否位于 out-of-band 数据标记 |
std::size_t available() 和 std::size_t available(boost::system::error_code& ec) |
获取 socket 可读数据量 |
void bind(const endpoint_type& endpoint) 和 BOOST_ASIO_SYNC_OP_VOID bind(const endpoint_type& endpoint, |
绑定 socket 道 local endpoint |
void connect(const endpoint_type& peer_endpoint) 和 BOOST_ASIO_SYNC_OP_VOID connect(const endpoint_type& peer_endpoint, |
同步阻塞式 socket 连接到指定的 peer_endpoint |
async_connect(const endpoint_type& peer_endpoint, BOOST_ASIO_MOVE_ARG(ConnectHandler) handler) |
异步非阻塞 socket 连接到指定的 peer_endpoint |
template <typename SettableSocketOption> 和 template <typename SettableSocketOption> |
* boost::asio::socket_base::broadcast @n * boost::asio::socket_base::do_not_route @n * boost::asio::socket_base::keep_alive @n * boost::asio::socket_base::linger @n * boost::asio::socket_base::receive_buffer_size @n * boost::asio::socket_base::receive_low_watermark @n * boost::asio::socket_base::reuse_address @n * boost::asio::socket_base::send_buffer_size @n * boost::asio::socket_base::send_low_watermark @n * boost::asio::ip::multicast::join_group @n * boost::asio::ip::multicast::leave_group @n * boost::asio::ip::multicast::enable_loopback @n * boost::asio::ip::multicast::outbound_interface @n * boost::asio::ip::multicast::hops @n * boost::asio::ip::tcp::no_delay |
template <typename GettableSocketOption> 和 template <typename GettableSocketOption> |
同上 |
template <typename IoControlCommand> 和 template <typename IoControlCommand> |
执行 IO Commond |
bool non_blocking() BOOST_ASIO_SYNC_OP_VOID non_blocking( 和 void non_blocking(bool mode) |
(1) mode = true 时,对于不能马上执行同步操作时,将导致失败 boost::asio::error::would_block (2) mode = false 时,同步操作将阻塞直到完成 |
bool native_non_blocking() BOOST_ASIO_SYNC_OP_VOID native_non_blocking( 和 void native_non_blocking(bool mode)
|
同上,但是对应原生套接字 |
endpoint_type local_endpoint() 和 endpoint_type local_endpoint(boost::system::error_code& ec) |
获取本地 end_point |
endpoint_type remote_endpoint() 和 endpoint_type remote_endpoint(boost::system::error_code& ec) |
获取对端的 end_point |
void shutdown(shutdown_type what) 和 BOOST_ASIO_SYNC_OP_VOID shutdown(shutdown_type what, |
关闭 socket |
void wait(wait_type w) 和 BOOST_ASIO_SYNC_OP_VOID wait(wait_type w, boost::system::error_code& ec) |
阻塞式等待 socket 进入 wait_type 指定的的就绪状态 (读就绪,写就绪,错误就绪) |
template <typename WaitHandler> BOOST_ASIO_INITFN_RESULT_TYPE(WaitHandler, void (boost::system::error_code)) async_wait(wait_type w, BOOST_ASIO_MOVE_ARG(WaitHandler) handler) |
异步等待 socket 进入 wait_type 指定的就绪状态 (读就绪,写就绪,错误就绪) |
- 点赞
- 收藏
- 分享
-
- 文章举报

boost::asio序列17: basic_datagram_socket 和 basic_stream_socket
explicit basic_datagram_socket(const executor_type& ex) 和 template <typename ExecutionContext> |
创建&未打开udp socket |
basic_datagram_socket(const executor_type& ex, const protocol_type& protocol) 和 template <typename ExecutionContext> |
创建&打开 udp socket |
basic_datagram_socket(const executor_type& ex, const endpoint_type& endpoint) 和 template <typename ExecutionContext> |
创建&打开&绑定到自定local end_point的udp socket |
basic_datagram_socket(const executor_type& ex, 和 template <typename ExecutionContext> |
由原生套接字创建udp socket |
basic_datagram_socket(basic_datagram_socket&& other) 和 basic_datagram_socket& operator=(basic_datagram_socket&& other) 和 template <typename Protocol1, typename Executor1> 和 template <typename Protocol1, typename Executor1> |
移动构造函数 |
template <typename ConstBufferSequence> std::size_t send(const ConstBufferSequence& buffers) |
用于stream socket,阻塞式发送数据,buffers为发送的数据 |
template <typename ConstBufferSequence> 和 template <typename ConstBufferSequence> |
用于stream socket,阻塞式发送数据,buffers为发送的数据,其中message_flags可取的值: BOOST_ASIO_STATIC_CONSTANT(int, |
template <typename ConstBufferSequence, typename WriteHandler> 和 template <typename ConstBufferSequence, typename WriteHandler> |
用于stream socket,异步发送数据, |
template <typename ConstBufferSequence> 和 template <typename ConstBufferSequence> 和 template <typename ConstBufferSequence> |
用于datagram socket,阻塞式发送数据 |
template <typename ConstBufferSequence, typename WriteHandler> 和 template <typename ConstBufferSequence, typename WriteHandler> |
用于datagram socket,非阻塞式发送数据 |
template <typename MutableBufferSequence> 和 template <typename MutableBufferSequence> 和 template <typename MutableBufferSequence> |
用于stream socket,阻塞式接收数据 |
template <typename MutableBufferSequence, typename ReadHandler> 和 template <typename MutableBufferSequence, typename ReadHandler> |
用于stream socket,非阻塞式接收数据 |
template <typename MutableBufferSequence> 和 template <typename MutableBufferSequence> 和 template <typename MutableBufferSequence> |
用于datagram socket,阻塞式接收数据,对端end_point保存在sender_endpoint中 |
template <typename MutableBufferSequence, typename ReadHandler> 和 template <typename MutableBufferSequence, typename ReadHandler> |
用于datagram socket, 非阻塞式接收数据,对端end_point保存在sender_endpoint中 |
对于basic_stream_socket 和 basic_datagram_socket类似,调用方式和参数相同,不同之处在于basic_datagram_socket只能调用datagram socket相关的函数,basic_stream_socket只能调用stream socket相关的函数
- 点赞
- 收藏
- 分享
-
- 文章举报

今天的关于c – 通过迭代器进行basic_string转换是否合法?和c迭代器编写的分享已经结束,谢谢您的关注,如果想了解更多关于.net – 在Visual Basic关键字(例如`String`)上使用CLR类型(例如`System.String`或`[String]`)是否有任何可以想象的优势?、basic_string, string, wstring、boost::asio 序列 15: basic_socket、boost::asio序列17: basic_datagram_socket 和 basic_stream_socket的相关知识,请在本站进行查询。
本文标签: