如果我创建一个const联合对象(例如在下面的代码中),那么就不能完成成员赋值.那么在任何情况下都有使用const联合对象吗?
union un
{
int i;
float f;
char c;
};
const union un a;
/// ! a.i = 10; error.
Run Code Online (Sandbox Code Playgroud) 我在iOS中有一项功能,如果IPv6中的用户设备网络,我需要禁用它.有没有办法我们可以通过编程方式将设备(iPhone/iPad)的IP地址作为字符串获取,然后检查它是IPv4还是IPv6网络(或者只是在不获取实际地址的情况下判断它是在IPv4还是IPv6网络上)?
我能找到的最近的是iPhone/iPad/OSX:如何以编程方式获取我的IP地址?(David H.),它再次要求我们事先指定网络,因此无法解决我的目的......通过他的解决方案,我总是得到一个IPv4或者总是得到一个IPv6.
对于IPv6测试,我使用Apple推荐的NAT64工具(https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html).
作为一种解决方法,我现在使用DNS来检查(https://hirooka.pro/?p=6169),我觉得这不是一个正确的方法,因为它应该是基于IP地址.另外,非常奇怪的是,iPad总是显示一个IPv4地址(即使连接到IPv6网络),但只是在DNS风格上有所不同......有人知道为什么会这样吗?
提前致谢.
#define B 100+B
main()
{
int i= B;
}
Run Code Online (Sandbox Code Playgroud)
我知道这是错的,但出于好奇,当我编译它时,我得到了这个奇怪的错误:
"B未在此范围内宣布".
为什么会这样?如果这个错误是因为编译器在替换后删除了宏,那么当B在A可用之前必须被删除时,下面的代码是如何工作的呢?
#define B 100
#define A 100+B
main()
{
int i= B;
int j =A;
}
Run Code Online (Sandbox Code Playgroud) typedef char* c;
const c ptr1 = "pointer";
++ptr1; /// error
const char* ptr2 = "pointer";
++ptr2; /// runs fine
Run Code Online (Sandbox Code Playgroud)
现在ptr1应该是类型const char*,因此是非const指针,那么为什么它被视为常量指针?
如果我有一个类A(按值返回一个对象),并且两个函数f()和g()只有它们的返回变量不同:
class A
{
public:
A () { cout<<"constructor, "; }
A (const A& ) { cout<<"copy-constructor, "; }
A& operator = (const A& ) { cout<<"assignment, "; }
~A () { cout<<"destructor, "; }
};
const A f(A x)
{A y; cout<<"f, "; return y;}
const A g(A x)
{A y; cout<<"g, "; return x;}
main()
{
A a;
A b = f(a);
A c = g(a);
}
Run Code Online (Sandbox Code Playgroud)
现在,当我执行该行时A b = f(a);,它输出:
copy-constructor, constructor, f, destructor假设f()中的对象y直接在目的地创建,即在对象b的内存位置创建,并且没有涉及临时值,这很好. …
据我所知,不纯函数是那些在使用相同参数调用时并不总是返回相同值的函数(我必须丢失一些东西,或者可能是错误的,如果我正确的话,请纠正我).
那么为什么被printf()认为是不纯的功能呢?
我有两个整数变量i和j,我想创建一个函数,它将这两个变量作为参数,并使用xor运算符交换它们的内容.现在,如果我使函数按值获取参数即void swap (int x , int y);(函数体与swap下面的函数相同),那么值将在函数内很好地交换.但正如我想要的那样是在调用函数中交换变量值我使用了通过引用传递参数(以及通过指针):
void swap ( int& x , int& y )
{
x^=y^=x^=y;
cout << x<< " " << y << endl ;
}
int main ()
{
int i (1), j (2) ;
swap ( i, j ) ;
cout << i << " " << j << endl ;
}
Run Code Online (Sandbox Code Playgroud)
但两种情况都没有显示正确的结果!
为什么swap函数不通过引用或指针交换传递参数的值?