我编写了一个带有可选 string
参数的函数,但意外地没有将其默认为 ""
,而是将其默认为 0
:
void a(string b=0)
我编译时没有任何警告或其他情况。
如果没有(!!!)在默认参数的情况下使用内容(根据其他参数,这个参数仅在显式设置时使用),这会导致附近代码中出现非常奇怪的行为。
再说一遍:我没有使用那个空值字符串,但在更改附近的代码位置时出现了段错误。
我的问题,因为编译器没有提示:该语法的含义是什么,将某些复杂参数(非数字、非指针)默认为 0
?
========================================== 不小心写了
void a(string b=0)
而不是
void a(string b="")
预计编译器会因语法错误而失败,但编译正常。
最佳答案
当使用 0
构造 std::string
时,编译器将为 std::string
类选择以下重载构造函数:
basic_string(const charT* s, const Allocator& a = Allocator());
但是,传递空指针作为第一个参数,而不是以空结尾的 C 字符串,是未定义的行为。
关于c++ - 声明的含义是什么,例如无效a(字符串b = 0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75214710/