9 c++ initialization conditional-operator
我正在阅读以下内容的区别:
1)
std::string test = level > 10 ? "Master" : "Beginner";
Run Code Online (Sandbox Code Playgroud)
2)
std::string test;
if (level > 10)
test = "Master";
else
test = "Beginner";
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,我被告知在第二种选择中,正在创建一个我不理解的临时值。
我了解到,当我们在没有初始化的情况下声明一个变量时,它会占用垃圾,因此编译器只保存一个内存位置,而不会“工作”来更改其值。
从语法上讲,第一种情况与此有些等价:
constexpr const char* f(int level) {
if (level > 10)
return "Master";
else
return "Beginner";
}
std::string test = f(level);
Run Code Online (Sandbox Code Playgroud)
在这里,test立即用"Master"或初始化"Beginner"。在第二种情况下,test首先默认初始化,然后将任一值分配给它。
然而,优化后不一定是这样:编译器可以很好地在两种情况下生成完全相同的代码。
当我们声明一个没有初始化的变量时,它会占用垃圾
这仅适用于基本类型和 POD 类型,而不适用于std::string具有默认构造函数的类。查找默认初始化以获取详细信息。
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |