【发布时间】:2011-12-08 09:42:54
【问题描述】:
为什么不编译:string 作为返回类型会不会有问题?
constexpr std::string fnc()
{
return std::string("Yaba");
}
【问题讨论】:
标签: c++ compiler-errors c++11 constexpr
为什么不编译:string 作为返回类型会不会有问题?
constexpr std::string fnc()
{
return std::string("Yaba");
}
【问题讨论】:
标签: c++ compiler-errors c++11 constexpr
采用指向char 的指针的std::string 的构造函数不是constexpr。在constexpr 函数中,您只能使用constexpr 的函数。
【讨论】:
constexpr 的原因是它有副作用(即分配),不能在编译时进行。
constexpr 2. 有一个成员初始化器部分只涉及潜在的常量表达式和 3. 有一个空的主体。在我看来,std::string 必须违反 #2。
std::string 使用任意长度const char* 的constexpr 构造函数并确保安全。虽然字符串文字确实是常量表达式,但有很多 const char* 类型的东西不是常量表达式。想到std::string 的c_str 成员。 constexpr 上的重载无法区分两者。