编辑:这与C++标准核心语言活动问题上的活动问题232有关
所以真正的问题是标准如何允许间接通过空指针?
请考虑以下代码:
struct a { int x; };
struct b { int y; };
struct c: a, b { };
b *f(c *pointer_to_c) { return pointer_to_c; }
Run Code Online (Sandbox Code Playgroud)
f(...)必须测试是否pointer_to_c是NULL,如果是,则返回NULL.(无论你如何施放指针,NULL指针总是一个NULL指针.)
现在,请考虑以下事项:
b *f_ref(c &reference_to_c) { return &reference_to_c; }
Run Code Online (Sandbox Code Playgroud)
第一个问题:是否f_ref需要检查是否&reference_to_c是NULL?第二个问题:如果C++最终通过空指针定义间接行为,这f_ref是否必须检查NULL?(我想答案取决于标准允许的内容,即,如果它表示"为多重继承而未定义对基类进行NULL引用",那么答案显然是否定的.)
对于最后一个难题,现在考虑一下:
const b *f_const_ref(const c &reference_to_c) { return &reference_to_c; }
Run Code Online (Sandbox Code Playgroud)
是否f_const_ref必须检查&reference_to_c到NULL?顺便说一句,在VC++ 2010中,所有三个函数都经过优化f …
我想了解标准关于将指针解引用到基的观点,但是我在寻找它方面没有任何进展。以这两个类为例:
class Base
{
public:
virtual void do_something() = 0;
};
class Derived : public Base
{
public:
virtual void do_something();
};
void foo2(Base *b)
{
Base &b1 = *b; // how this work by standard?
}
void foo()
{
Derived *d = new Derived();
foo2(d); // does this work by standard?
}
Run Code Online (Sandbox Code Playgroud)
因此,基本上,如果取消引用指向类型D的对象的类型B的指针,切片会在适当的位置发生,还是会临时出现?我倾向于认为临时不是一个选择,因为这意味着临时是抽象类的实例。
不管真相如何,我都希望能有一个指向ISO标准的指针。(或者第三,就此而言。:))
编辑:
我提出的观点是,暂时不作为一种选择,因为它可能会以其行为方式行事,这是很合逻辑的,但我无法在标准中找到确认,而且我也不是普通读者。
编辑2:
通过讨论,很明显,我的问题实际上是关于取消引用指针机制的,而不是关于拼接或临时的。我感谢每个人都为我做的愚蠢,最后我得到了最令我困惑的问题的答案:为什么我找不到标准的东西……显然这是错误的问题,但是我有正确的答案。
n
C++标准说($ 27.6.3.4.2)两个std::basic_streambuf::seekoff和的效果std::basic_streambuf::seekpos是分别为每个类派生的std::streambuf.但是如何std::istream/ std::ostream工作呢?后两个类的接口的定义至少有关于pubseekoff/ pubseekposmean 的参数的几个假设.
似乎没有澄清部分std::basic_streambuf,std::basic_streambuf即使它们支持任意搜索,也不是所有实现接口的子类都可以与流一起使用.例如,根据当前规范,子类可以说在MyStreamBuf::seekoff参数which = ios_base::inond中分别which = ios_base::out控制输出和输入序列(注意:反转).我认为除了通常的"支持"和"不支持"之外,特定的搜索操作可以被指定为"支持但具有不同的接口",这是非常反直觉的.或者这是标准的意图?
该OData的规格为长。甚至“ OData Core ”文档也很长。
那么,对于只读OData发布者至少需要实现的内容的简要总结呢?
鉴于enum如此声明:
enum {
A,
B,
C,
D
};
Run Code Online (Sandbox Code Playgroud)
参考C++ 11标准的第7.2节,通用编译器支持是什么?具体来说,摘自第7.2.2节:
如果第一个枚举器没有初始化器,则相应常量的值为零.没有初始值设定项的枚举器定义为枚举数提供了通过将前一个枚举数的值增加1而获得的值.
我可以期待共同的,现代的编译器(GCC,英特尔,铛,近期CL的版本,其他人),给予同样的结果,那就是A = 0,B = 1,C = 2,和D = 3?
我正在寻找pthreads我正在做并行性工作的标准.我发现它应该是IEEE 1003.1c"EEE标准信息技术 - 便携式操作系统接口(POSIX(R)) - 系统应用程序接口(API)修正2:线程扩展(C语言)".但是,当我达到它时,它说标准已被"取代",但他们没有说出什么(或者我没有看到他们说的地方).有谁知道取代标准的链接?谢谢.
class Foo {};
int main()
{
Foo *foo[500] = { NULL};
}
Run Code Online (Sandbox Code Playgroud)
无论OS /编译器是否标准整个阵列都将被设置为NULL?
目前我正在阅读C++ 11标准,其中(第12章)提到了特殊成员函数?复制?分配经营者.
我已经面对operator =,这只是一个assignement运算符
我的第一个猜测是它用在这样的语句中:
Class_name instance_name1 = instance_name2;
Run Code Online (Sandbox Code Playgroud)
当一个对象被同时创建和初始化时,我检查了我的假设并通过复制构造函数(这是预期的)完成了.
那么,使用复制分配运算符的方法,如何声明它,你能给我一些它的用法示例.提前致谢!
在提供示例代码时,"foo"和"bar"通常用于表示"任意值",它们几乎是标准符号.
当您想要显示两个以上的任意值时,是否有更多"标准"术语?
即.是否有一个标准的术语列表,前两个是"foo"和"bar"?
我最近发现,如果它遵循Common Lisp标准,我可以在学校使用Lisp的任何方言进行函数式编程课程.Clojure是否遵循此标准?它太不一样了吗?