在检查我的Windows移动设备上是否有摄像头并启用时,我遇到了一些我不理解的东西.
代码如下所示:
public static bool CameraP(){
return Microsoft.WindowsMobile.Status.SystemState.CameraPresent;
}
public static bool CameraE()
{
return Microsoft.WindowsMobile.Status.SystemState.CameraEnabled;
}
public static bool CameraPresent1()
{
return Microsoft.WindowsMobile.Status.SystemState.CameraPresent
&& Microsoft.WindowsMobile.Status.SystemState.CameraEnabled;
}
public static bool CameraPresent2()
{
return CameraP() && CameraE();
}
Run Code Online (Sandbox Code Playgroud)
当我调用CameraPresent2()它时返回false(没有相机存在).但是,当我打电话给CameraPresent1()我收到一个MissingMethodException并注释"找不到方法:get_CameraEnabled Microsoft.WindowsMobile.Status.SystemState."
第二个术语的评估CameraPresent1是因为它们都是属性(在语言层面)吗?
还有什么能解释行为上的差异吗?
C++ 14包括标准定义的文字,其中包括标题中的std::string各种时间跨度<chrono>.
要使用它们,您必须说using namespace std::literals;(或者某些变化取决于您想要的文本,因为它们位于各种内联命名空间中).
这一切都很好,但我很好奇为什么using需要声明.没有前导下划线的UDL保留用于实现,因此"hello world"s在符合标准的程序中不可能有任何其他含义.
那么为什么#include <string>不足以将文字转换功能纳入范围呢?为什么我必须明确包含文字命名空间?
编辑: N3531是我能找到的提案的最新版本 - 不幸的是,它没有讨论将东西放入命名空间的动机,但只说:
可以总结[波特兰]讨论的要求如下:
- 为一组(相关的)UDL运算符使用内联命名空间
鉴于课程:
public class Foo
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
是否可以通过Convert.ChangeType从字符串创建Foo实例:
Type type = typeof(Foo);
object value = "one";
value = System.Convert.ChangeType(value, type);
Run Code Online (Sandbox Code Playgroud)
这是第三方API尝试重建对象的方式.有人提到这可能是隐式运算符,但从我的理解,我将执行以下操作,而不是创建对象:
Foo foo = new Foo() { Name = "one" };
string fooAsString = foo; // implicit conversion -- no cast needed
Run Code Online (Sandbox Code Playgroud)
有没有办法以这种方式创建对象?此外,如果有另一种方法,我可以更改Convert.ChangeType.
更新: 我问的原因是因为它抛出异常:
从'System.String'到'JibbaJabba + Foo'的转换无效.
并添加运营商没有解决问题.
剧透警报:也许是一个愚蠢的问题.:)
#include <iostream>
using namespace std;
class Base
{
public:
virtual void YourMethod(int) const = 0;
};
class Intermediate : private Base
{
public:
virtual void YourMethod(int i) const
{
cout << "Calling from Intermediate" << i << "\n";
}
};
class Derived : private Intermediate, public Base
{
public:
void YourMethod(int i) const
{
cout << "Calling from Derived : " << i << "\n";
}
};
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么会抛出编译器警告:
main.cpp:21: warning: direct …Run Code Online (Sandbox Code Playgroud) 我使用snprintf将字符串连接到char数组:
char buf[20] = "";
snprintf(buf, sizeof buf, "%s%s", buf, "foo");
printf("%s\n", buf);
snprintf(buf, sizeof buf, "%s%s", buf, " bar");
printf("%s\n", buf);
Run Code Online (Sandbox Code Playgroud)
问题是第二次连接buf而不是添加"bar",替换"foo"它.输出如下:
foo
bar
Run Code Online (Sandbox Code Playgroud)
第一个%s应该保留buf(在这种情况下保持"foo").第二个%s应该附加"bar"它.对?
我究竟做错了什么?
在Eclipse中,您可以使用alt+ <-或->在您所在的位置之间移动.Intellij的等价物是什么?
我的嵌入式系统有一个支持C++ 11的g ++版本,所以我一直在清理代码
for( uint16_t* p = array; p < (&array)[1]; ++p ) {
*p = fill_value;
}
Run Code Online (Sandbox Code Playgroud)
至
for( uint16_t& r : array ) {
r = fill_value;
}
Run Code Online (Sandbox Code Playgroud)
这是多更具有可读性.
是否存在基于范围的for循环,它可以在所有元素上运行array2[m][n]?
旧版本是
for( int16_t* p = array2[0]; p < (&array2)[1][0]; ++p ) {
*p = fill_value;
}
Run Code Online (Sandbox Code Playgroud)
我不希望嵌套循环,除非保证编译器将它们展平.
(FWIW,编译器是TI Code Composer Studio 6.0.0附带的GNU 4.7.4 Linaro g ++ ARM交叉编译器)
在我的VS2010副本中,stdlib.h包含(第353-355行)
_CRTIMP __declspec(noreturn) void __cdecl exit(_In_ int _Code);
_CRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code);
_CRTIMP void __cdecl abort(void);
Run Code Online (Sandbox Code Playgroud)
我觉得很奇怪,没有noreturn注释abort().有谁知道这个的原因?这是一个错误吗?
编辑:在VS2008中,它是相同的,但是stdlib.h的第371-373行
缺少noreturn注释会触发错误C4716.
进一步参考:用于noreturn标注注释的C++ 0x提议,它表示abort应该携带它.
编辑:看起来像一堆讨论消失了删除的答案,但它的要点包含在缺陷报告#048中.
Comeau,g ++(ideone)和EDG接受以下代码而无需诊断.Visual C++编译成功,尽管有警告C4624.
class indestructible_base
{
~indestructible_base();
};
class T : indestructible_base
{
public:
//T() {}
};
int main(void) { new T(); }
Run Code Online (Sandbox Code Playgroud)
取消注释构造函数,它不再编译.
也许这是规则,如果在构造函数内发生异常,必须销毁子对象?看起来很奇怪,因为身体是空的,不能引起异常.即便如此,添加一个异常规范担保,不会抛出任何异常(throw()或noexcept)并且没有任何区别.
为什么用户声明的构造函数需要访问基类析构函数,而自动生成的构造函数则不需要?
这个问题的灵感来自于:防止析构函数在C++中运行
我正在尝试编译这段代码,但无论出于何种原因它都无法正常工作.有人能帮我吗?我想知道如何正确使用strlen():
#include<iostream>
using namespace std;
int main()
{
char buffer[80];
cout << "Enter a string:";
cin >> buffer;
cout << strlen(buffer);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我尝试过使用cin.getline(buffer,80); 但我得到了相同的编译错误问题.
我的编译器说错误就是这个
错误:strlen未在此范围内声明