作者Killercat (杀人猫™)
看板C_and_CPP
标题Re: [问题] G++ and VC++ Constructor 问题
时间Thu Jun 1 21:44:18 2017
※ 引述《ROGZ (ROGZ)》之铭言:
这种问题多半是不同STL版本问题
我个人对於这疑问的建议是,直接翻STL Source code。
翻STL这件事情没那麽可怕,而且很多IDE都可以快速的帮你找到位置
比方说你的问题,大多数合格的IDE瞬间理解string要找到这里 :
template <class _CharT, class _Traits, class _Allocator>
inline _LIBCPP_INLINE_VISIBILITY
basic_string<_CharT, _Traits, _Allocator>::basic_string(const value_type* __s)
{
_LIBCPP_ASSERT(__s != nullptr, "basic_string(const char*) detected nullptr");
__init(__s,
traits_type::length(__s));
#if _LIBCPP_DEBUG_LEVEL >= 2
__get_db()->__insert_c(this);
#endif
}
也就是说其实他会对value_type去取长度(用traits_type::length)
这部分就先解决了你的问题:他怎麽知道const char*长度的
至於basic_string是什麽?string是basic_string的一个特殊具现化
但是你其实先不用知道,IDE都会帮你先处理掉
至於为什麽VC不行,我个人手边是没有windows不知道他STL怎麽实作的
不过你可以依样画狐狸的找一下能不能找到source code来讨论?
以及你VC版本,以及他出了什麽error message?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.177.112.114
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1496324660.A.5D3.html
1F:推 LPH66: 同问 VC++ 版本, 我手上的 2013 Community 没这问题 06/01 22:02
2F:→ LPH66: /FAsc 印出组语出来看也是呼叫了 string(char const *) 06/01 22:03
3F:→ djshen: en.cppreference.com/w/cpp/language/copy_initialization 06/01 22:53
4F:→ djshen: note部分 06/01 22:53
5F:推 ROGZ: 谢谢您的解答 06/01 22:54
6F:→ djshen: 另外 是VC可以吧? 06/01 22:54
7F:→ ROGZ: 还有,VC是没问题的, 是g++不行 06/01 22:55
8F:→ Killercat: 我看反了...ok 加个-std=C++11在g++後面可以吗? 06/01 23:22
9F:→ Killercat: g++版本也看一下 我手边只有clang,看不出问题 06/01 23:22