如果'Test'是一个普通的类,那么之间有什么区别:
Test* test = new Test;
Run Code Online (Sandbox Code Playgroud)
和
Test* test = new Test();
Run Code Online (Sandbox Code Playgroud) 有一些已知的方法来操纵整数文字的类型
0L; // long
3U; // unsigned integer
1LL; // long long
Run Code Online (Sandbox Code Playgroud)
我需要的是一种初始化整数文字的方法std::size_t.我以为这样做
2U; // unsigned int
Run Code Online (Sandbox Code Playgroud)
就足够了,但是在调用函数模板时仍然会遇到编译器错误,该函数模板需要两个相同整数类型的参数(没有匹配的函数可以调用func(unsigned int, size_t)
我知道/验证显式cast(static_cast<std::size_t>(1))第一个参数解决了问题,但我在问是否有更漂亮的解决方案
编辑
该功能有签名
template <class T> const T& func(const T& a, const T& b);
Run Code Online (Sandbox Code Playgroud)
EDIT2
我不知道这个问题是否是"责备",但我很高兴地宣布这是即将到来的(在评论中提到这个问题的@malat)
我无法从C++ 11标准中看出nullptr_t是否有默认构造函数.换句话说,以下是否有效?:
nullptr_t n;
Run Code Online (Sandbox Code Playgroud)
GCC和VC++允许上面的代码,但clang没有.我在标准中找不到任何指定它没有默认构造函数的东西,我能找到它表明它应该.这对我很重要,因为我正在为较旧的编译器支持编写nullptr的基本回退实现,并且需要知道是否需要为其提供默认构造函数.
它已被反复重复,原始类型没有构造函数.例如_bar,当我调用时,这不会初始化为0 Foo():
class Foo{
int _bar;
};
Run Code Online (Sandbox Code Playgroud)
所以显然int()不是构造函数.但它的名字是什么?
在这个例子中我会说i:(构造?初始化?fooed?)
for(int i{}; i < 13; ++i)
Run Code Online (Sandbox Code Playgroud)
Loki Astari 在这里提到该技术有某种名称.
编辑回应Mike Seymour:
#include <iostream>
using namespace std;
class Foo{
int _bar;
public:
void printBar(){ cout << _bar << endl; }
};
int main()
{
Foo foo;
foo.printBar();
Foo().printBar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Visual Studio 2013上运行此代码产生:
3382592
3382592
有趣的是gcc 4.8.1收益率:
134514651
0
在您考虑将其标记为重复之前,请完整阅读该问题.声明就像
int i=int();
大多数程序员会说这里有值初始化,我将初始化值.(0作为输出).但它也在C++ 98编译器上输出0作为输出.以下我在C++ 98实现上测试的程序并给出了0作为输出.
#include <iostream>
int main()
{
int i=int();
std::cout<<i;
}
Run Code Online (Sandbox Code Playgroud)
不要说我在上面的C++ 98程序中初始化了值,因为在C++ 03中引入了值初始化.那我怎么在这里初始化?它真的是构造函数调用吗?int()看起来像构造函数调用.原始类型也有C++中的默认构造函数,正如Bjarne stroustrup在他的C++编程语言和TC++ PL中所说的那样.C++编程语言Bjarne stroustrup:
10.4.2内置类型也有默认构造函数
另请阅读同一本书第6.2.8节.
以下链接还表示内置类型在C++中具有默认构造函数.
1)http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=15
2)http://www.geeksforgeeks.org/c-default-constructor-built-in-types/
那么我真的可以说它是整数类型的构造函数调用吗?
是否int a = int();一定给我一个零?
怎么样,如果int被取代char,double,bool或指针类型?
请问在语言标准中指定了哪里?
我知道已经问过类似的问题,但我的问题是不同的,所以请不要在完全阅读之前将其标记为重复或其他内容.
Bjarne Stroustrup在他的"C++编程语言"一书中说过
10.4.2内置类型也有默认构造函数
另请阅读同一本书第6.2.8节.
以下链接还表示内置类型在C++中具有默认构造函数.
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=15
http://www.geeksforgeeks.org/c-default-constructor-built-in-types/
但是以下链接的答案表明内置类型没有构造函数.
另外,请阅读以下链接,这些链接说明int i=int();原因值初始化之类的语句基本上最终为零初始化.
以下是我有时问过的问题,即int a=int()在C++ 98中发生了什么,我得到了默认初始化的答案.
如果我没有错,那么在C++标准中没有提及或者C++标准没有说原始类型也有构造函数.那么,从Bjarne Stroustrup的书中,我可以说它在概念上是真的,他们有构造函数,但实际上没有像内置类型的构造函数这样的东西吗?他书中的文字真的有缺陷吗?或者,根据Bjarne Stroustrup的书,当它们被实际调用和使用时,它是否真的如此?
我读过Bjarne Stroustrup博士的书"C++编程语言"第3版内置类型在第10.4.2节中也有C++中的构造函数.
但是接下来的链接说POD类型不能有构造函数:
http://www.parashift.com/c++-faq-lite/pod-types.html
这是真的吗?原始类型在C++中也有构造函数吗?
这在 C++ 中编译
if (char()=='a') {
}
Run Code Online (Sandbox Code Playgroud)
我在 CLion 中打开一个非常古老的项目后发现了这一点(是的 Jetbrains!)。有问题的代码试图做到这一点:
if (ProfileType()==GI_PROFILE_TYPE && forEdit &&
!user.AccessGranted(AK_GI_MOD))
return false;
Run Code Online (Sandbox Code Playgroud)
假设 ProfileType() 是返回配置文件类型的成员方法。但事实并非如此。原来是这样的:
typedef char ProfileType;
Run Code Online (Sandbox Code Playgroud)
本来应该是
GetType()
Run Code Online (Sandbox Code Playgroud)
这段代码已经默默地编译了多年(几十年?),但从未真正正常工作过。我发现这个只是因为我注意到 CLion 发出警告,条件总是错误的。起初我怀疑这个警告,然后我怀疑导航到,然后我意识到这个警告实际上是正确的!多年来我已经在这段代码上运行了多个静态分析工具,但到目前为止还没有发现这个错误。我用 gcc -Wall 构建,它也没有抱怨这一点......
我的问题是:这实际上意味着什么:
char()
Run Code Online (Sandbox Code Playgroud) 我已经看过这些,看起来似乎是c ++代码中的函数,但我不知道它们做了什么或它们是什么,它们似乎做类似于类型转换的东西,但它们看起来不像是类型转换,所以它们是什么?
他们看起来像这样:int(x)在哪里x有一些数字输入,我一直在网上看,但我一直无法找到任何关于他们的信息(可能是因为我不知道他们叫什么).
有帮助吗?
构造器从灰尘中构建对象.
这是我最近多次报道过的一个声明.
在初始化内置数据类型变量时,该变量也必须"由灰尘构建".那么,是否还有内置类型的构造函数?
此外,编译器如何以不同方式处理BUILT IN DATATYPE和USER DEFINED CLASS,同时为每个创建实例?我的意思是关于构造函数,析构函数等的细节.
关于堆栈溢出的这个查询是关于相同的,它有一些非常有趣的细节,最有趣的是Bjarne所说的......!
根据我的理解,在c ++中实例化一个整数是合法的,如下所示:
int x = int(5);
Run Code Online (Sandbox Code Playgroud)
作为Java程序员,我假设这行代码调用传递"5"作为参数的整数的构造函数.我读过虽然int不是一个类,因此没有构造函数.
那么,在那行代码中究竟发生了什么,以及通过这种方式初始化int之间的根本区别是什么:
int x = 5;
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我认为这个问题并不新鲜,但我在任何地方都找不到答案。
在 C++ 中(double)myInt和之间有区别double(myInt)吗?
c++ ×13
constructor ×6
primitive ×2
c++-faq ×1
c++98 ×1
casting ×1
clang ×1
clion ×1
construction ×1
gcc ×1
new-operator ×1
nomenclature ×1
nullptr ×1