C++ 在哪里定义int()为0?
在本例中,s.second为0,但未初始化。你能提供一个链接到C++标准,在哪里定义它为什么是0?我知道这是因为s.second由int初始化,但在标准中找不到int为0的行。它是 8.5初始值设定人[dcl.init] 10初始值设定项为空括号集的对象,即,应进行值初始化 及 7值初始化T类型的对象意味着: -如果T是第9条中可能的cv限定类类型,且具有用户提供的构造函数12.1,则 调用T的默认构造函数,如果T没有可访问的默认值,则初始化是错误的 建造师; -如果T可能是cv限定的非联合类类型,但没有用户提供的构造函数,则对象 初始化为零,如果T的隐式声明的默认构造函数是非平凡的,则该构造函数是 打电话。 -如果T是数组类型,则每个元素都初始化为值; -否则,对象初始化为零 我猜 5到零初始化类型为T的对象或引用意味着: -如果T是标量类型3.9,则对象被设置为值0,作为整型常量表达式, 转换为T;[……] 我知道这是因为s.second由int初始化,但在标准中找不到int为0的行 以下是您在C++11标准中必须遵循的路径-此答案用作参考,它比当前的官方标准更新 根据C++11标准第8.5/11段: 初始值设定项为空括号集的对象,即,应进行值初始化。[……] 此外,根据C++11标准第8.5/8段: 初始化T类型对象的值意味着: -如果T可能是cv限定类类型,则第9条没有默认构造函数12.1或 用户提供或删除的默认构造函数,则对象默认初始化 -如果T可能是cv限定的非并集类类型,但没有用户提供或删除的默认构造函数, 然后对象初始化为零,如果T有一个非平凡的默认构造函数,则默认初始化 -如果T是数组类型,则每个元素都初始化为值 -否则,对象初始化为零 最后,尽管这很直观,但根据第8.5/6段: 将类型为T的对象或引用初始化为零意味着: -如果T是标量类型3.9,则将对象设置为值0 0,作为整型常量表达式,转换为T -[……] 我知道这是因为秒是由int初始化的 该标准实际上并没有说second是用int初始化的。它只是给出了使用默认构造函数创建std::pair的效果,如§20.3.2所示: 效果:值初始化第一个和第二个 值初始化定义为§8.5: 初始化T类型对象的值意味着: 如果T可能是cv限定类类型,则第9条[…] 如果T可能是cv限定的非并集类类型[…] 如果T是数组类型,[…] 否则,对象初始化为零 Whcih导致秒被初始化为零,因为它是int§8.5: 将类型为T的对象或引用初始化为零意味着: 如果T是标量类型3.9,则将对象设置为值0 0,作为整型常量表达式,转换为T [……]C++ 在哪里定义int()为0?,c++,standards,C++,Standards,在本例中,s.second为0,但未初始化。你能提供一个链接到C++标准,在哪里定义它为什么是0?我知道这是因为s.second由int初始化,但在标准中找不到int为0的行。它是 8.5初始值设定人[dcl.init] 10初始值设定项为空括号集的对象,即,应进行值初始化 及 7值初始化T类型的对象意味着: -如果T是第9条中可能的cv限定类类型,且具有用户提供的构造函数12.1,则 调用T的默认构造函数,如果T没有可访问的默认值,则初始化是错误的 建造师; -如果T可能是cv限定的非联合类类
另请参见,但它在何处表示初始化的值int==0?@MFONTANI添加了相关部分。@MFONTANI还添加了其中初始化的0实际上意味着0的内容:@LuchianGrigore您可以提供一个指向您使用的标准文件的链接。我没有在这里找到7部分@Ashot:我在我的回答中提供了一个链接到一个最近的草案,原始ISO标准不是免费的。
#include <iostream>
#include <string>
int main() {
std::pair<std::string, int> s;
std::cout << s.second << std::endl;
}