考虑以下计划:
#include <iostream>
int main = ( std::cout << "C++ is excellent!\n", 195 );
Run Code Online (Sandbox Code Playgroud)
在Windows 7操作系统上使用g ++ 4.8.1(mingw64),程序编译并运行正常,打印:
C++非常棒!
到控制台.main似乎是一个全局变量而不是一个函数; 如果没有该功能,该程序如何执行main()?这段代码是否符合C++标准?程序的行为是否定义明确?我也使用了该-pedantic-errors选项,但该程序仍然编译并运行.
假设一个类被定义为
class A {
//.....
};
Run Code Online (Sandbox Code Playgroud)
现在我正在创建两个对象
A a,b;
Run Code Online (Sandbox Code Playgroud)
按照什么顺序a和b创造的呢?它是由标准定义的吗?
我刚刚遇到了基本上执行以下操作的代码:
int a = (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这种表示法.这是什么意思?
请考虑以下代码,
int i;
i = 1,2,3,4,5;
printf("First time i = %d\n",i);
i = (1,2,3,4,5);
printf("Second time i = %d\n",i);
Run Code Online (Sandbox Code Playgroud)
输出:
第一次i = 1
第二次i = 5
为什么括号使逗号运算符取最后一个值而没有括号它取第一个值?
提前致谢.
我写了以下代码:
#include <iostream>
using namespace std;
int f()
{
cout << "f()" << endl;
return 3;
}
int v()
{
cout << "v()" << endl;
return 4;
}
int main()
{
int m = f(),v();
cout << m << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望它打印:
f()
v()
3
Run Code Online (Sandbox Code Playgroud)
编译g++ -O0 test.cpp -o test.out并运行结果:
f()
3
Run Code Online (Sandbox Code Playgroud)
为什么省略对v的调用?(这不能做优化,因为我添加了标志-O0)
我正在研究一种通用的非侵入式智能指针实现.我在第4节中有些困惑.一个声明是
仅当结果类型是多态类类型的左值时,才计算作为typeid运算符的参数提供的表达式.
相关的示例代码是:
template<typename T>
void* startOfObject(T* p) {
void* q=static_cast<void*>(p);
typeid(q=dynamic_cast<void*>(p),*p); // This line
return q;
}
Run Code Online (Sandbox Code Playgroud)
AFAIU,它意味着q=dynamic_cast<void*>(p)如果结果类型是多态类类型的左值,则将对其进行评估.该结果意味着评价的结果dynamic_cast<void*>(p)(我想),所以dynamic_cast在任何情况下被应用.文章陈述(据我所知),如果p不是多态的话dynamic_cast就不会应用,但为什么呢?在应用它之前,如何知道结果是否是多态的?如果有人详细描述了如何执行完整的语句,将会很有帮助.
另一种说法是
如果p为NULL也存在问题 - typeid将抛出std :: bad cast.
我看到的问题是取消引用,如果p是NULL,而不是typeid(虽然它可能抛出bad_typeid,但这不是因为转换).dynamic_cast会返回一个NULL类型的指针void*,如果p是NULL,而且typeid应该能够推断出类型的信息.这是一个错字,还是我错过了什么?
我有一个看起来像这样的函数:
void myclass::myfunc()
{
int i;
for( std::vector<Foo>::iterator it = var.begin(), i = 0; it < var.end(); it++, i++ )
{
/* ... */
}
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
无法转换
int为std::_Vector_iterator<>
这段代码有什么问题?
可能重复:
C++逗号运算符
我今天遇到了意外(至少对我来说)C++行为,由以下snippit显示:
#include <iostream>
int main()
{
std::cout << ("1", "2") << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
2
Run Code Online (Sandbox Code Playgroud)
这适用于括号之间的任意数量的字符串.在visual studio 2010编译器和键盘上测试.
我想知道为什么这首先编译,这个'功能'的用途是什么?
c++ ×9
c ×4
comma ×3
operators ×2
declaration ×1
dynamic-cast ×1
for-loop ×1
parentheses ×1
stl ×1
string ×1
syntax ×1
typeid ×1