如果我说的nullptr,是正确的术语的 nullptr(只有一个,并且所有提及是同一事物的引用),或一个 nullptr(有几个相同的东西).
也就是说,应该是功能文档说
如果是ptr
nullptr,则该函数使用内部缓冲区...
要么
如果ptr是a
nullptr,则该函数使用内部缓冲区...
(讽刺的是,这不是一个基于意见的问题,因为它可以通过参考究竟 nullptr是什么来回答)
我很确定这一定已经在这里了,但是我没有找到很多关于如何解决这类问题的信息(没有在电话上强制转换):
给定两个重载,我希望一个带有文字0的函数的调用总是调用unsigned int版本:
void func( unsigned int ) {
cout << "unsigned int" << endl;
}
void func( void * ) {
cout << "void *" << endl;
}
func( 0 ); // error: ambiguous call
Run Code Online (Sandbox Code Playgroud)
我明白为什么会这样,但我不想一直写func(0u)甚至func(static_cast(0)).所以我的问题是:
1)是否有推荐的方法来执行此操作?
2)以下方式进行操作是否有任何问题,这是什么原因?
void func( unsigned int ) {
cout << "unsigned int" << endl;
}
template <typename T>
void func( T * ) {
static_assert( std::is_same<T, void>::value, "only void pointers allowed" );
cout << "void *" << endl;
}
func( 0 ); // …Run Code Online (Sandbox Code Playgroud) 我多年没用C++编写代码了.我最近发现,在那些年里它发生了巨大变化.我不确定我是否喜欢这些变化,但这是另一个讨论.
我仍然有一些C++代码敲我的硬盘.如果我把它拿出来并尝试用一个不错的新C++编译器编译它,比如说最新版本的g ++,它会编译吗?没有警告(假设它之前没有警告编译)?
最近我确实搞乱了一些VC++ 2010,并发现了一些我期望工作的东西不起作用,并且当我尝试使用NULL时根据上下文得到不同的消息.但是在该代码的一部分中,我使用NULL甚至没有警告.
或多或少的标题暗示.虽然我还没有使用C++ 0x,但是我想在它发生时做好准备,而且我还想减少我必须重写的代码量才能使用它的一些功能.这样我就可以一次性地向前和向后兼容.
我发现的最有趣的一个是nullptr,我最近经常使用它.
在检查了"官方解决方法"和Meyer的建议之后,我决定在我的C++和未来的C++ 0x程序中使用它.第二部分很简单 - 作为关键字,nullptr只需支持.但第一部分让我感到有些不适.
Meyers提案的功能如下:
class nullptr_t { // ? this is my issue
// definition of nullptr_t
} nullptr = { };
Run Code Online (Sandbox Code Playgroud)
该提议的问题在于它声明了要声明为std::nullptr_tC++ 0x所需的类型.这意味着对于"感觉原生"的解决方法,必须通过重新打开std::命名空间来添加类型.我理解在C++程序中这是非法的(不像添加特殊化,这显然是皱眉和放开警告).
我想用nullptr在舒适和在C++程序合法的方式.我想到的一个选项是在另一个命名空间中声明类型然后使用它using:
namespace mylibrary {
class nullptr_t {
....
} nullptr = { };
// end namespace
}
// These would have to go in the header file.
using mylibrary::nullptr;
using …Run Code Online (Sandbox Code Playgroud) 使用有什么区别:
if (NULL == pointer)
Run Code Online (Sandbox Code Playgroud)
和使用:
if (pointer == NULL)
Run Code Online (Sandbox Code Playgroud)
我的教授说使用前者而不是后者,但我看不出两者之间的区别.
我最近看到一个被声明为的函数:
void func(type* ¶m);
Run Code Online (Sandbox Code Playgroud)
我已经知道之间的区别type* param和type& param.以上与他们有何不同?什么时候使用这个?这样做是否明智?
我有两个功能:
void DoSomething( const tchar* apsValue )
void DoSomething( size_t aiValue )
Run Code Online (Sandbox Code Playgroud)
现在我想传递'0'作为size_t:
DoSomething(0);
Run Code Online (Sandbox Code Playgroud)
编译器抛出一个错误:"对重载函数的模糊调用"
要解决这个问题,我可以使用static_cast,例如:
DoSomething(static_cast<size_t>(0));
Run Code Online (Sandbox Code Playgroud)
或者简单:
DoSomething(size_t(0));
Run Code Online (Sandbox Code Playgroud)
其中一个比另一个好吗?有没有其他方法可以解决这个问题?
我无法理解这段代码的结尾(array = 0;):
#include <iostream>
int main()
{
std::cout << "Enter a positive integer: ";
int length;
std::cin >> length;
int *array = new int[length];
std::cout << "I just allocated an array of integers of length " << length << '\n';
array[0] = 5; // set element 0 to value 5
delete[] array; // use array delete to deallocate array
array = 0; // use nullptr instead of 0 in C++11
return 0;
}
Run Code Online (Sandbox Code Playgroud)
最后,删除动态分配的数组(返回到OS),然后分配值0.
为什么这样做?数组返回操作系统后,无需为其赋值0,对吗?
代码来自:http …
在Visual Studio 2010中使用C++.我正在将我的转换NULL为nullptr.用我的代码这很好.但是如果我打电话给WINAPI,例如:
__checkReturn WINOLEAPI OleInitialize(IN LPVOID pvReserved);
Run Code Online (Sandbox Code Playgroud)
通常我会称之为:
::OleInitialize(NULL);
Run Code Online (Sandbox Code Playgroud)
我可以安全地使用nullptr我NULL在这样的电话中使用的地方吗?
也就是说,我可以这样做:
::OleInitialize(nullptr);
Run Code Online (Sandbox Code Playgroud)
与MFC api一样:
CFileDialog fileDlg(TRUE, ".txt", NULL, 0, strFilter);
Run Code Online (Sandbox Code Playgroud)
我可以更换吗?
CFileDialog fileDlg(TRUE, ".txt", nullptr, 0, strFilter);
Run Code Online (Sandbox Code Playgroud)
我猜我可以,但我只是想确保没有陷阱.
UPDATE
所以我通过nullptr替换了我的所有NULL,它似乎在所有地方工作,但是我在下面的行中得到以下错误:
propertyItem = new CMFCPropertyGridProperty(_T("SomeName"),
"SomeValue", "SomeDescription", nullptr, nullptr, nullptr, nullptr);
Run Code Online (Sandbox Code Playgroud)
8> c:\ something\something.cpp(118):错误C2664:'CMFCPropertyGridProperty :: CMFCPropertyGridProperty(const CString&,const COleVariant&,LPCTSTR,DWORD_PTR,LPCTSTR,LPCTSTR,LPCTSTR)':无法从'nullptr转换参数4 'to'DWORD_PTR'8>本机nullptr只能转换为bool,或者使用reinterpret_cast转换为整数类型
(注意CMFCPropertyGridProperty是Microsoft MFC类)那么这是什么意思?
对两个类中的一个对象执行 var_dump 会得到相同的结果
Class Node{
public $parent = null;
public $right = null;
public $left = null;
function __construct($data){
$this->data = $data;
}
}
Class Node{
public $parent;
public $right;
public $left;
function __construct($data){
$this->data = $data;
}
}
Run Code Online (Sandbox Code Playgroud)
例如
$a = new Node(2);
var_dump($a);
Run Code Online (Sandbox Code Playgroud)
对于上述任一类返回以下内容
object(Node)#1 (4) {
["parent"]=>
NULL
["right"]=>
NULL
["left"]=>
NULL
["data"]=>
int(2)
}
Run Code Online (Sandbox Code Playgroud)
对于变量来说,情况似乎并非如此。
$b;
var_dump($b);
Run Code Online (Sandbox Code Playgroud)
如果您打算将该属性的值设置为 ,null是否需要明确编写该值,因为 php 似乎会自动为您执行此操作?
另外 - 根据这个答案/sf/answers/422316331/,如果您尝试获取未初始化变量的值,C++ 会给出未定义的行为。如果类中的属性未初始化为值null,C++ 是否会像 php 那样自动设置该属性的值?
c++ ×9
null ×2
nullptr ×2
overloading ×2
arrays ×1
backport ×1
c++03 ×1
coding-style ×1
mfc ×1
php ×1
pointers ×1
static-cast ×1
templates ×1
winapi ×1