Насколько мне известно, ссылка не может быть нулевой, но когда я запускаю такой код:
#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, он не смог скомпилироваться, поэтому я думаю, что магия остается внутри класса string, но как?
И более того, как я могу проверить, является ли s
нулевым или нет? если я использую if(s==nullptr)
или if(s.empty())
, он не скомпилируется.