指针的大小是否与其指向的类型的大小相同,或者指针总是具有固定大小?例如...
int x = 10;
int * xPtr = &x;
char y = 'a';
char * yPtr = &y;
std::cout << sizeof(x) << "\n";
std::cout << sizeof(xPtr) << "\n";
std::cout << sizeof(y) << "\n";
std::cout << sizeof(yPtr) << "\n";
Run Code Online (Sandbox Code Playgroud)
这会是什么输出?会sizeof(xPtr)返回4并sizeof(yPtr)返回1,或者2指针实际上会返回相同的大小吗?我问这个的原因是因为指针存储的是存储器地址而不是它们各自存储的地址的值.
正如我最近所了解的那样,C/C++中的长度与int的长度相同.简单地说,为什么?甚至在语言中包含数据类型似乎也毫无意义.它没有特定于int的特定用途吗?我知道我们可以像这样声明一个64位的int:
long long x = 0;
Run Code Online (Sandbox Code Playgroud)
但是为什么语言会选择这样做,而不仅仅是做得好......比int更长?其他语言如C#这样做,为什么不用C/C++呢?
我最近收到了这个警告(VC++ 2010)
warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators
我假设这是关键部分.我的操作系统课程已经有一段时间了,所以我无法弄清楚这意味着什么.如果我没记错的话,关键部分可以使用共享资源.那么这个警告是如何相关的呢?它究竟意味着什么?
c++ msvcrt visual-studio-2010 critical-section static-initializer
我已经在这里工作了一些程序,现在有大量的字符串解析等等.我被建议使用char数组来代替字符串,因为char数组更快.我理解为什么char数组很快,但字符串类型是什么让它变慢?它实现了什么数据结构,有没有办法使它像char数组一样快?
尝试让 UserDetailsService 为我设置的 oauth2 资源服务器工作。我能够成功验证 jwt,但我似乎没有做任何事情来让它调用 loadUserByUsername 方法。最初使用 SAML 并且它可以工作,但现在我已经切换到 Oauth2,但我无法让它工作。
@Service
public class OauthUsersDetailsServiceImpl implements UserDetailsService{
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//some user loading junk here - this is never called
}
}
Run Code Online (Sandbox Code Playgroud)
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception
{
//test key for now
SecretKeySpec key = new SecretKeySpec("private key0000000000000000000000000000000".getBytes(), "HMACSHA256");
http
.authorizeRequests()
.antMatchers(/*some endpoints im excluding from auth - this all works*/)
.permitAll().and() …Run Code Online (Sandbox Code Playgroud) spring-security spring-boot spring-security-oauth2 userdetailsservice spring-oauth2
编辑:嗯......这很有趣.我将设置设置为指针并传递给它.工作得很漂亮.所以,这就解决了.对于那些对答案好奇的人,我会保持开放.
我在从内存流中在FMod中创建声音时遇到问题.我查看了FMod附带的loadfrommemory示例,然后进行了操作.首先,我正在使用的代码......
CSFX::CSFX(CFileData *fileData)
{
FMOD_RESULT result;
FMOD_CREATESOUNDEXINFO settings;
settings.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
settings.length = fileData->getSize();
_Sound = 0;
std::string temp = "";
for (int i = 0; i < fileData->getSize(); i++)
temp += fileData->getData()[i];
result = tempSys->createSound(temp.c_str(), FMOD_SOFTWARE | FMOD_OPENMEMORY, &settings, &_Sound);
}
Run Code Online (Sandbox Code Playgroud)
就像这样,我在tempSys-> createSound()上遇到访问冲突.我已经确认tempSys有效,因为它在从文件创建声音时起作用.我还通过将内容写入文件来确认我的数据的char*是有效的,然后我可以在Media Player中打开该文件.我觉得设置有问题.如果我将该参数更改为0,程序不会爆炸,我最终得到结果= FMOD_ERR_INVALID_HANDLE(考虑到第3个参数为0,这是有意义的).知道我做错了什么吗?
另外,请忽略std :: string的使用,我将其用于某些测试目的.
我正在建立一个系统,我可以根据从文件中读取的一些信息动态实例化类.所以,这必须在运行时完成.有问题的类是多态的,都是从CBaseTheoryEnt类中继承的.我想要做的是将ID号与每个类相关联(例如,使用无序映射).本质上,我的管理类将查看从输入文件中读入的一系列这些ID号,然后实例化相应的类.将类与ID相关联然后根据输入实例化它们的理想和有效方法是什么?
对于我正在进行的游戏,我想把音频放在另一个线程上,这样我就可以将声音排队并让它们立即播放.我在该线程中使用的代码如下所示
private void _checkForThingsToPlay()
{
while (true)
{
if (_song != null)
{
_playSong(_song);
_song = null;
}
while (_effects.Count > 0)
_playSfx(_effects.Dequeue());
Thread.Sleep(100);
}
}
Run Code Online (Sandbox Code Playgroud)
它以异步方式运行并且运行良好.但是,如果没有呼叫睡眠,它会占用cpu上的整个核心.我的问题是,sleep()是降低CPU使用率的有效方法还是有更好的方法来做到这一点?我的朋友和我觉得这是一个快速的黑客.
在VB.NET中,使用Interop.Excel,我需要根据行号和列字母访问单元格.我试着运气...
pages.title = DirectCast(wksht.Cells(rows, "D"), Excel.Range).Value
Run Code Online (Sandbox Code Playgroud)
由于参数采用了类型对象,我想也许这样可行,但没有运气.我还想过将每个字母枚举为一个数字,但电子表格中的列并不正常.意思是,他们不是
ABCDEFG
他们实际上......
ABCDET AZ
我不知道这是否会对列的编号产生影响.问题应该是显而易见的,但重申一下,如何根据行号和列字母获取单元格?
假设我有以下课程......
class foo
{
private:
void bar(int, int);
void bar2(int, float);
void bar3();
void callOne(int message);
};
Run Code Online (Sandbox Code Playgroud)
假设我想callOne()根据message参数的值调用其中一个函数.说0个电话bar(),1个电话bar1()和2个电话bar2().我知道这里的简单方法是使用a switch,但在实际实现中我觉得这可能会变得混乱,因为我将有更多的功能.这基本上是我的后备实现.
有没有一种方法使用函数指针,lamdbas等,可以说,"嘿,我给你这个消息.基于该消息调用特定的功能."?我基本上正在寻找一种基于消息查找函数(可能是字典)并调用它的方法.