所以今天我写了一个相当难以找到的bug,我将std :: string初始化为nullptr(不是指向std :: string的指针,而是值本身)。我发现它显然只能在C ++ 11或更高版本中使用clang。
#include <string>
#include <iostream>
using namespace std;
class Meh{
int x;
};
class Foo
{
private:
std::string x=nullptr;
Meh y=nullptr; //remove this line and it compiles
public:
std::string z=nullptr;
};
int main(void)
{
Foo f;
cout << f.z;
return 0;
}
正如您所看到的,我尝试将nullptr分配给一个类的随机实例,但它没有工作。字符串中有什么神奇之处可以让它工作,这种甚至是有效的语法?我假设在这种情况下我会遇到类型转换错误。
作为参考我用这个编译:
clang++ test.cpp -O3 -g -fno-inline -std=c++11 -Wall
它没有给出任何形式的警告,但如果不使用C ++ 11
则会出错答案 0 :(得分:14)
这只是因为constructors({3}}(链接中的数字(5))和assignment operators(链接中的数字(3))std::string
接受了<?php
require_once( 'config.php' );
$bodypart = $_GET['bodypart'];
$sql = "SELECT c_name FROM condition WHERE c_name = '$bodypart'";
$result = $conn->query($sql);
$json_response = array();
if ($result->num_rows > 0) {
while($row = mysql_fetch_assoc($query)) {
$json_response[] = $row;
}
print json_encode($json_response);
}
$conn->close();
?>
,因此const char*
匹配。
在C ++ 11之前(因此在nullptr
之前),当您尝试从nullptr
或0
进行构造时,会出现同样的问题。所有这些情况都是非法的并导致未定义的行为,尽管过去至少有一个STL(RogueWave?)接受它并生成一个空字符串。