在函数的参数列表中初始初始化的变量范围
Scope of a variable initialized in the parameter list of a function
以下代码构建,编译和运行(C ,mingw(似乎没有任何问题。但是,我是否可以保证,即使函数通过参考来获取参数?
,。如果不是,则在使用函数参数列表中使用其初始化器列表创建对象时(通过参考来参数(可能会很危险,因为它会立即被破坏:在这种情况下,函数不为t有一个副本,但是对内存的引用可能或可能不会被另一个过程重新分配?
struct S
{
S() : a(0), b(0) {}
S(int a, int b) : a(a), b(b) {}
int a;
int b;
};
void foo(const S& s)
{
std::cout << "s.a = " << s.a << std::endl;
std::cout << "s.b = " << s.b << std::endl;
}
int main()
{
foo({4,5}); // <-- What is the scope of the struct initialized here?
return 0;
}
根据cppreference [lifetime]:
所有临时对象均被销毁,作为评估的最后一步 全表达(词法(包含了它们的点 创建,如果创建了多个临时对象,它们是 以与创造顺序相反的顺序被摧毁。这是真实的 即使该评估以抛出异常结束。
这意味着临时对象将在返回后销毁,因此它是完全安全的。
在此处实现的prvalue是从支撑的列表{4,5}
中创建类型S
的临时对象,该对象在全表达结束时被破坏。在您的情况下foo({4,5});
。
相关文章:
- 初始值设定项列表是否只接受使用相同类型的值初始化变量?
- 在 C++ 中访问 lambda 捕获初始化变量
- 为什么C++不支持对未初始化变量进行智能分析?
- 使用 clang++ 和 g++ 在C++中初始化变量
- C++使用 lambda 初始化变量
- 如何在初始化列表中的构造函数之后初始化变量/对象?
- C++ - 输出与初始化变量不同?
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 在C++中,为什么int可以使用new运算符初始化变量,而double不能
- 具有静态存储持续时间的常量初始化变量的初始化顺序
- C++ 中的初始化变量
- C++中未初始化变量的值
- 如何在需要提及需要循环声明的其他类的类中初始化变量?
- 我想知道在构造函数中初始化变量时的生命周期
- 读取恰好具有良好值的未初始化变量
- 如何在 getter 的父类中初始化变量的情况下访问子类中的变量
- 为什么在 c++ 中有多种初始化变量的方法
- 没有参数的默认构造函数是否总是初始化变量?
- 是否可以使用 lambda 初始化变量(删除复制 ctor 时)
- 使用构造函数跳闸UB的新放置后使用初始化变量