虽然这很可能是一个愚蠢的问题,但我看到了一些关于你不应该这样做的事情,尽管它在 C++ 11 中是允许的,但我不太明白为什么。谁能解释这是为什么?
问问题
1021 次
1 回答
6
这不被允许!
21.4.7 basic_string 字符串操作[string.ops]
21.4.7.1 basic_string 访问器[string.accessors]
const charT* c_str() const noexcept; const charT* data() const noexcept;
- 返回: 一个指针 p,使得 p + i == &operator 对于 [0,size()] 中的每个 i。
- 复杂性:恒定时间。
- 要求:程序不得更改存储在字符数组中的任何值。
除此之外,您正在通过 a 修改数据引用const char *
,这通常表示 a const_cast<char*>
。这不仅会导致未定义的行为,而且根据 Herb Sutter 的说法,const
现在应该被理解为线程安全的(参见他关于const
andmutable
的讨论)。
但是,如前所述,如果足够大,则使用std::string str; &str[0]
是安全的。str
只是不要使用.c_str()
or .data()
。
于 2013-02-21T22:45:13.567 回答