Насколько мне известно, ссылка не может быть нулевой, но когда я запускаю такой код:
#include <iostream>
#include <string>
void test(int i, const std::string& s = nullptr) {
std::cout << i << " " << s << std::endl;
}
int main() {
test(1, "test");
test(2);
}
необязательный параметр s
может быть нулевым, и код будет построен. Более того, когда запускается test(2)
, программа генерирует исключения вместо того, чтобы печатать какие-то случайные строки.
Когда я изменил s
на какой-то базовый тип, такой как int, он не смог скомпилироваться, поэтому я думаю, что магия остается внутри строкового класса, но как?
И более того, как я могу проверить, является ли s
нулевым или нет? если я использую if(s==nullptr)
или if(s.empty())
, он не скомпилируется.
const
? - person goodvibration   schedule 06.05.2019s
с nullptr в качестве параметра для конструктораstring(const char*)
. - person rafix07   schedule 06.05.2019const
)? - person goodvibration   schedule 06.05.2019const char*
), ссылка на неконстантную не может быть привязана к временной. - person Martin Bonner supports Monica   schedule 06.05.2019