虽然这可能是一个愚蠢的问题,但我看到了一些关于你不应该这样做的事情,尽管它在C++ 11中被允许,但我不明白为什么.谁能解释为什么会这样?
这不被允许!
21.4.7 basic_string字符串操作[string.ops]
21.4.7.1 basic_string访问器[string.accessors]
Run Code Online (Sandbox Code Playgroud)const charT* c_str() const noexcept; const charT* data() const noexcept;
- 返回:指针p,使得[0,size()]中的每个i的p + i ==&operator.
- 复杂性:恒定时间.
- 要求:程序不得更改存储在字符数组中的任何值.
除此之外,你用a修改数据引用const char *,通常表示a const_cast<char*>.这不仅会导致未定义的行为,而且根据Herb Sutter的说法,const现在应该被认为是线程安全的(参见他的谈话const和mutable).
但是,如上所述,std::string str; &str[0]如果str足够大,使用是安全的.只是不要使用.c_str()或.data().
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |